根据元素的位置重塑列表列表

时间:2014-05-29 18:59:10

标签: python list

我有一个列表,看起来像这样;

[[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]

1 个答案:

答案 0 :(得分:8)

您可以使用ziplist 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