2011-04-28 37 views

回答

11
import itertools 

L1 = [1,2,3] 
L2 = ['a','b','c'] 
list(itertools.chain.from_iterable(itertools.izip(L1, L2))) 

你可以使用izip_longest,填充值爲長度不均勻的列表。

+1

+1兩年後仍能改善您的答案 – 2013-07-31 20:59:10

+0

同樣在這裏。持久性獲勝。 – Mai 2013-07-31 23:57:46

5

郵編列表,然後壓平的結果:

Z = zip(L1, L2) 
print [x for item in Z for x in item] 
+0

男人......我不敢相信我沒有想到這一點。謝謝。 – thenickname 2011-04-28 14:43:30

0

很長的路要走:

假設兩個列表的長度相同:

merged = [] 
for x in range(len(L1)): 
    merged.append(L1[x]) 
    merged.append(L2[x]) 

如果不是,走兩個數組的長度,比較它們,保持較長列表的長度。然後運行較大列表的範圍(len())的代碼,並且在x大於最小列表的最後一個索引之後,爲該列表運行更大列表(僅附加較大列表的值)的if語句。這可能需要您將每個列表存儲在比較後的兩個不同列表中,分別標記爲「較小」和「較大」或類似的列表。

短路:

壓縮列表。

+0

該死的。看起來我已經被打敗了,因爲我正在寫很長的路要做。 :-P – Vinay 2011-04-28 14:47:18

+0

另外,顯然壓縮列表會返回元組,但它看起來像其他人已經充分回答了一旦你zip'em做什麼。乾杯! – Vinay 2011-04-28 14:54:17

0

Zip和總結的結果:

sum(zip(L1, L2),()) 
+1

不,zip返回元組列表。 – 2011-04-28 15:10:37