亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

以 python 保留順序合并兩個或多個列表的最佳方法

以 python 保留順序合并兩個或多個列表的最佳方法

滄海一幻覺 2023-04-25 17:16:42
有沒有更pythonic的方式來做到這一點?輸入:list1 =  [['a',1],['b',2],['c',3],['d',4]]list2 =  [['e',5],['f',6],['g',7],['h',8]]期望的輸出:out = [['a',1],['e',5],['b',2],['f',6],['c',3],['g',7],['d',4] ,['h',8]]我已經做好了:def mergePreserveOrder(*argv):          for arg in argv:          for arg2 in argv:             if(len(arg) != len(arg2)) :                print("arrays size do not match" + str(arg) +  str(arg2))                                return     output = []        for index in range (len(argv[0])):            for arg in argv:            output.append(arg[index])        return  outputmergePreserveOrder (list1 ,list2  )
查看完整描述

3 回答

?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

您可以zip一起使用chain.from_iterable

list(chain.from_iterable(zip(list1, list2)))

示例:


from itertools import chain


list1 = [['a',1],['b',2],['c',3],['d',4]]

list2 = [['e',5],['f',6],['g',7],['h',8]]


print(list(chain.from_iterable(zip(list1, list2))))

# [['a', 1], ['e', 5], ['b', 2], ['f', 6], ['c', 3], ['g', 7], ['d', 4], ['h', 8]]


查看完整回答
反對 回復 2023-04-25
?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

只需itertools.chain使用zip

>>> import itertools

>>> list(itertools.chain(*zip(list1, list2)))

[['a', 1], ['e', 5], ['b', 2], ['f', 6], ['c', 3], ['g', 7], ['d', 4], ['h', 8]]


查看完整回答
反對 回復 2023-04-25
?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

最通用的解決方案是模塊roundrobin中的配方:itertools

from itertools import cycle, islice


def roundrobin(*iterables):

? ? "roundrobin('ABC', 'D', 'EF') --> A D E B F C"

? ? # Recipe credited to George Sakkis

? ? num_active = len(iterables)

? ? nexts = cycle(iter(it).__next__ for it in iterables)

? ? while num_active:

? ? ? ? try:

? ? ? ? ? ? for next in nexts:

? ? ? ? ? ? ? ? yield next()

? ? ? ? except StopIteration:

? ? ? ? ? ? # Remove the iterator we just exhausted from the cycle.

? ? ? ? ? ? num_active -= 1

? ? ? ? ? ? nexts = cycle(islice(nexts, num_active))


list1 =? [['a',1],['b',2],['c',3],['d',4]]

list2 =? [['e',5],['f',6],['g',7],['h',8]]


print(list(roundrobin(list1, list2)))

產生你想要的輸出。


chain與+不同zip,此解決方案適用于不均勻長度的輸入,其中zip將靜默丟棄超出最短輸入長度的所有元素。


查看完整回答
反對 回復 2023-04-25
  • 3 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號