问题描述
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]