合并嵌套列表,将列位于同一索引处的元素放在一起

问题描述

我有一个列表:

lst = [
    [1,2,3],[1,3]
]

如何将列表的每一列添加到空列表中。 列我的意思是,lst[i][column],例如1,1,1 然后 2,2 等等,然后得到一个列表,如下所示:

[1,3,3]

到目前为止我已经尝试过:

pos = 0
column = 0
row = 0
i = 0
empty = []
while i < len(lst):
    empty.append(lst[i][0])
    i += 1
print(empty)

解决方法

这是通过使用 itertools.chain()zip() 的组合来实现此目的的一种功能方式:

from itertools import chain

my_list = [
    [1,2,3],[1,3]
]

new_list = list(chain(*zip(*my_list)))

new_list 的位置:

[1,1,3,3]

请参阅以下链接以了解有关这些功能的更多信息:

,

您可以使用 itertools.chain 并真正使用 star operator

from itertools import chain

[*chain(*zip(*lst))]  
# or more classic:
# list(chain.from_iterable(zip(*lst)))
# [1,3]

或者在简单的嵌套推导式中使用上面显示的换位模式 zip(*...)

[x for sub in zip(*lst) for x in sub]
# [1,3]
,

以下是使用 nested list comprehension 的方法:

lst = [
    [1,3]
]

print([v[i] for i in range(len((lst[0]))) for v in lst])

输出:

[1,3]

上面的嵌套列表解析等价于这个nested for loop

lst = [
    [1,3]
]

arr = list()
for i in range(len((lst[0]))):
    for v in lst:
        arr.append(v[i])
print(arr)

输出:

[1,3]

最后,您可以使用内置的 zip() 方法:

lst = [
    [1,3]
]

print([j for i in zip(*lst) for j in i])
,
lst = [
    [1,3]
]
new_list = []
for i,j in enumerate(lst):
    new = lst[i]
    new_list.extend(new)

new_list = sorted(new_list)

print(new_list)

输出:

[1,3]