我有这些清单。
l1 = [1,2,3,4,5]
l2 = [6,7,8,9,0]
l3 = [11,12,13,14,15]
我想要的输出是这样的。
[[1,6,11], [2,7,12], [3,8,13], [4,9,14], [5,0,15]]
我所尝试的只是这样。
[[x] for x in l1]
我不知道如何附加第二个和第三个列表。
非常感谢任何帮助。
答案 0 :(得分:4)
如果您对tuples
感到满意,请使用下面的zip()
:
>>> l1 = [1,2,3,4,5]
>>> l2 = [6,7,8,9,0]
>>> l3 = [11,12,13,14,15]
>>>
>>> zip(l1, l2, l3)
[(1, 6, 11), (2, 7, 12), (3, 8, 13), (4, 9, 14), (5, 0, 15)]
或者您可以使用zip()
>>> [list(x) for x in zip(l1, l2, l3)]
[[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [5, 0, 15]]
请务必了解压缩列表的长度必须相等,或者在您的情况下,您最终可能会遗漏一些数据。这在文档中说明:
返回的列表的长度被截断为最短参数序列的长度
上述示例,请注意我们如何错过最后一个列表。
>>> l1 = [1,2,3,4]
>>> [list(x) for x in zip(l1, l2, l3)]
[[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14]]
您可以使用允许使用 fillvalue 的itertools.izip_longest()
来解决这个问题(默认为None
):
>>> from itertools import izip_longest
>>> [list(x) for x in izip_longest(l1, l2, l3)]
[[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [None, 0, 15]]
答案 1 :(得分:4)
您只需使用zip()
:
>>> l1 = [1,2,3,4,5]
>>> l2 = [6,7,8,9,0]
>>> l3 = [11,12,13,14,15]
>>>
>>> zip(l1, l2, l3)
[(1, 6, 11), (2, 7, 12), (3, 8, 13), (4, 9, 14), (5, 0, 15)]
>>>
>>> map(list, zip(l1, l2, l3))
[[1, 6, 11], [2, 7, 12], [3, 8, 13], [4, 9, 14], [5, 0, 15]]