附加或合并两个或多个列表

时间:2014-04-09 14:09:16

标签: python

我有这些清单。

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]

我不知道如何附加第二个和第三个列表。

非常感谢任何帮助。

2 个答案:

答案 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]]