我有一个列表,看起来像这样;
[[4, 0, 1], [0, 0, 1], [0, 1, 2], [1, 1, 0], [2, 0, 0]]
根据元素的位置,从上面的列表中获取3个列表的最有效方法是什么?
结果:
[4,0,0,1,2]
[0,0,1,1,0]
[1,1,2,0,0]
答案 0 :(得分:8)
您可以使用zip
和list comprehension:
>>> lst = [[4, 0, 1], [0, 0, 1], [0, 1, 2], [1, 1, 0], [2, 0, 0]]
>>> [list(x) for x in zip(*lst)]
[[4, 0, 0, 1, 2], [0, 0, 1, 1, 0], [1, 1, 2, 0, 0]]
>>>
在*
之前放置lst
将列表解压缩到zip
函数的参数中。在这种情况下:
zip(*lst)
相当于写作:
zip([4, 0, 1], [0, 0, 1], [0, 1, 2], [1, 1, 0], [2, 0, 0])
zip
然后通过返回元组的迭代器将这些列表压缩在一起,其中第n个元组包含每个列表中的第n个项目。在这种情况下,它返回: 1
>>> list(zip(*lst))
[(4, 0, 0, 1, 2), (0, 0, 1, 1, 0), (1, 1, 2, 0, 0)]
>>>
最后,列表推导将这些元组转换为列表并将它们收集到一个新列表中。
1 您需要致电list()
上的zip(*lst)
查看其内容,因为zip
会在Python 3中返回iterator。 X 子>