Skip to main content
 首页 » 编程设计

python之在不更改 python 中的外部列表的情况下展平内部列表

2025年05月04日15xiaohuochai

因此,只需在 stack-overflow/google 中输入 python flatten list 就会返回大量重复结果。我已经尝试了所有这些,但没有一个适用于这个特定实例。

我正在从 pyodbc 取回一个数据库结果集,它为我提供了一个可以强制转换为列表列表的数据结构。返回的每一行中的第一个元素(第一列)的格式为 "a.b.c"。我希望它是 "a"、"b"、"c"。我的第一直觉是按期分手,我也这么做了。

之前:

[["a.b.c", "d", 1], ["e.f.g", "h", 2], ... ] # rows left out for brevity 

之后:

# unfortunately, split returns a list, which then gets nested 
[[["a", "b", "c"], "d", 1], [["e", "f", "g"], "h", 2], ... ] 

但是,我想看到的是:

[["a", "b", "c", "d", 1], ["e", "f", "g", "h", 2], ... ] 

我尝试了以前关于堆栈溢出的解决方案来展平列表,但是虽然每个人都提到嵌套列表,但没有人说如何展平仅嵌套列表。

我试过:

from itertools import chain 
for row in rows: 
    row = list(chain(row)) # python won't allow modifications in a loop 

和

rows = [list(chain(row)) for row in rows] 

我想一定有一种方法,也许是 yield,可以做类似的事情:

for row in rows: 
    row = row[0].append(row[1:]) # but this doesn't work either 

我不知道如何修改列表列表中的内部列表。如果有比我迄今为止尝试过的更好的方法,我很乐意听到。预先感谢您的帮助。

请您参考如下方法:

怎么样:

>>> s = [["a.b.c", "d", 1], ["e.f.g", "h", 2]] 
>>> [k[0].split('.') + k[1:] for k in s] 
[['a', 'b', 'c', 'd', 1], ['e', 'f', 'g', 'h', 2]] 

这会获取 split 在对第一个元素进行操作后返回的列表,并将其添加到由其余元素组成的列表中。