2014-02-24 179 views
0

我想在這個詞的真正意義上的合併兩個列表:蟒蛇:合併兩個1D名單成一個一維列表

>>> l1 = [1,2,3,4] 
>>> l2 = [9,8,7,6] 
>>> merged(l1, l2) 
[1,9,2,8,3,7,4,6] 

我可以很容易到:

>>> m = [] 
>>> for i1,i2 in zip(l1,l2): 
     m.extend([i1,i2]) 
>>> m 
[1,9,2,8,3,7,4,6] 

但我不知道有更優雅的東西?

ps:有無數的問題聲稱要合併列表,但沒有我發現這樣做 - 道歉,如果我失去了真正的霧!

回答

2
[item for items in zip(l1, l2) for item in items] 
# [1,9,2,8,3,7,4,6] 

或者您可以使用itertools.chain這樣

from itertools import chain 
list(chain.from_iterable(zip(l1, l2))) 
# [1,9,2,8,3,7,4,6] 
1

使用zip和列表理解:

>>> l1 = [1,2,3,4] 
>>> l2 = [9,8,7,6] 
>>> [x for xs in zip(l1, l2) for x in xs] 
[1, 9, 2, 8, 3, 7, 4, 6] 
0

如何:

>>> l1 = [1,2,3,4] 
>>> l2 = [9,8,7,6] 
>>> sum(zip(l1,l2),()) 
(1, 9, 2, 8, 3, 7, 4, 6) 
>>> 
+2

使用'sum'與非數字類型通常是一個ba d的想法。在你的情況下,它會有二次性能 –

+0

gnibbler你能解釋一下嗎?它是怎樣的O(n2)以及爲什麼不用列表理解? –

+1

此方法創建一個元組(1,9),然後(1,9,2,8),然後(1,9,2,8,3,7),最後創建一個元組(1,9,2,8,3, 7,4,6)。每次創建新元組時,都需要複製先前的值。嘗試使用40000個項目而不是4個項目,您會看到很大的差異。 –