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

ric*_*hie 1 python list

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

[[4, 0, 1], [0, 0, 1], [0, 1, 2], [1, 1, 0], [2, 0, 0]]
Run Code Online (Sandbox Code Playgroud)

哪个是基于元素位置从上面的列表中获取3个列表的最有效方法?

结果:

[4,0,0,1,2]
[0,0,1,1,0]
[1,1,2,0,0]
Run Code Online (Sandbox Code Playgroud)

iCo*_*dez 8

您可以使用zip列表理解:

>>> 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]]
>>>
Run Code Online (Sandbox Code Playgroud)

放置*之前lst将列表解压缩到函数的参数中zip.在这种情况下:

zip(*lst)
Run Code Online (Sandbox Code Playgroud)

相当于写作:

zip([4, 0, 1], [0, 0, 1], [0, 1, 2], [1, 1, 0], [2, 0, 0])
Run Code Online (Sandbox Code Playgroud)

zip然后通过返回元组的迭代器将这些列表压缩在一起,其中第n个元组包含每个列表中的第n个项目.在这种情况下,它返回:1

>>> list(zip(*lst))
[(4, 0, 0, 1, 2), (0, 0, 1, 1, 0), (1, 1, 2, 0, 0)]
>>>
Run Code Online (Sandbox Code Playgroud)

最后,列表推导将这些元组转换为列表并将它们收集到一个新列表中.


1你需要调用list()zip(*lst),以查看其项目,因为zip返回一个迭代器在Python 3.x的