簡體   English   中英

按順序合並不同大小的列表

[英]Merge lists of different size with order

有沒有辦法像這樣合並列表:

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)]

我不需要任何“無”元素。 結果應該是一個列表。

使用itertools izip_longest

>>> 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是默認fillvalue:

>>> 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 ,請使用不能出現在列表中的填充值。 例如:

>>> list(izip_longest(L1,L2,L3,fillvalue='my_awesome_fillval'))
[(1.1, 2.1, 3.1), (1.2, 2.2, 3.2), (1.3, 2.3, 'my_awesome_fillval'), ('my_awesome_fillval', 2.4, 'my_awesome_fillval')]

合並列表

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM