我有一个列表,看起来像这样;
[[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)
>>> 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的