2014-02-24 135 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个项目,您会看到很大的差异。 –