合并具有订单的不同大小的列表

时间:2016-01-15 10:02:38

标签: python

有没有一种很好的方法来合并这样的列表:

L1 = [1.1, 1.2, 1.3]

L2 = [2.1, 2.2, 2.3, 2.4]

L3 = [3.1, 3.2]

结果:

[1.1, 2.1, 3.1, 1.2, 2.2, 3.2, 1.3, 2.3, 2.4]

应该没有"无"结果中的元素。

修改

因为它被标记为重复: 我不需要这样的结果:

[(1.1, 2.1, 3.1), (1.2, 2.2, 3.2), (1.3, 2.3, None), (None, 2.4, None)]

我不需要任何"无"元素。结果应该是一个列表。

2 个答案:

答案 0 :(得分:4)

来自izip_longest的{​​{1}}:

itertools

回答评论:

  

如果列表中包含None,该怎么办?

>>> from itertools import izip_longest >>> L1 = [1.1, 1.2, 1.3] >>> L2 = [2.1, 2.2, 2.3, 2.4] >>> L3 = [3.1, 3.2] >>> [x for sub in izip_longest(L1,L2,L3) for x in sub if x is not None] [1.1, 2.1, 3.1, 1.2, 2.2, 3.2, 1.3, 2.3, 2.4] 是默认的填充值:

None

如果列表中包含>>> list(izip_longest(L1,L2,L3)) [(1.1, 2.1, 3.1), (1.2, 2.2, 3.2), (1.3, 2.3, None), (None, 2.4, None)] ,请使用无法在列表中显示的填充值。例如:

None

答案 1 :(得分:2)

合并列表

L1 = [1.1, 1.2, 1.3]
L2 = [2.1, 2.2, 2.3, 2.4]
L3 = [3.1, 3.2]

您可以使用以下单行

>>>  [x for y in map(None,L1,L2,L3) for x in y if x is not None]
[1.1, 2.1, 3.1, 1.2, 2.2, 3.2, 1.3, 2.3, 2.4]