簡體   English   中英

一個接一個或兩個接兩個地組合列表交替元素

[英]Combine lists alternating elements one by one or two by two

我有 4 個列表:

a = ["a1", "a2", "a3", "a4", "a5", "a6", "a7", "a8"]

b = ["b1", "b2", "b3", "b4", "b5", "b6"]

c = ["c1", "c2", "c3", "c4", "c5"]

d = ["d1", "d2", "d3", "d4", "d5", "d6", "d7"]

我需要創建一個列表,一個一個地交替使用元素,直到可能為止,但是對於最后一個列表,我需要將它們 2 乘 2(也直到可能)。 所以結果應該是:

new_list = ["a1", "b1", "c1", "d1", "d2", "a2", "b2", "c2", "d3", "d4", "a3", "b3", 
            "c3", "d5", "d6", "a4", "b4", "c4", "d7", "a5", "b5", "c5", "a6", "b6", 
            "a7", "a8"]

我知道要一個一個地交替使用,您可以使用 itertools,例如:

import itertools
book_list = [x for x in itertools.chain.from_iterable(itertools.zip_longest(a,b, c, d)) if x is not None]

但是我確實要確保 list d 我采用 2 個元素而不是一個元素? 我能以某種方式在列表 d 上引入 pairwise() 嗎?

您可以從d創建一個迭代器並將其zip兩次以每次迭代從序列中提取兩次:

d2 = iter(d)
new_list = list(filter(None, chain.from_iterable(zip_longest(a, b, c, d2, d2))))

演示: https ://replit.com/@blhsing/MarriedOrderlyPoint

實際上,我通過將列表 d 分成 2 個列表,一個包含偶數元素,另一個包含奇數元素,設法簡單地解決了這個問題。

d_even = d[0::2]
d_odds = d[1::2]

然后將兩者都添加到 zip 中:

new_list = list(filter(None, chain.from_iterable(zip_longest(a, b, c, d_even, d_odd))))

暫無
暫無

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

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