2013-05-02 88 views

回答

7

你可以使用itertools.chain

>>> from itertools import chain 
>>> a = [5, 8, 9] 
>>> b = [6, 1, 0] 
>>> it=chain(a,b) 
>>> for x in it: 
    print x, 
...  
5 8 9 6 1 0 
+5

'iter(..)'不會生成一個生成器,它會生成一個迭代器。你寧願做'連鎖(a,b)'。 'a + b'只是將兩個列表的新副本合併在一起,這在您不需要該副本時效率不高。 – 2013-05-02 19:44:47

+0

@JochenRitzel好點,我解決了這個問題。 – 2013-05-02 19:49:07

1
def chain(*args): 
    for arg in args: 
     for item in arg: 
      yield item 

a = [5, 8, 9] 
b = [6, 1, 0] 
for x in chain(a,b): 
    print x, 

print ', '.join(map(str,chain(a,b))) 
1

你可以使用generator expressions一個可笑的Python的優雅的一行:

>>> a=[5,8,9] 
>>> b=[6,1,0] 
>>> g=(i for i in a+b) 

測試:

>>> for i in g: 
     print i 

5 
8 
9 
6 
1 
0 

或測試#2,如果你真的喜歡有之間的逗號每個項目,:

>>> print ', '.join(map(str,g)) 

5, 8, 9, 6, 1, 0 
+1

'(我爲我在a + b)'產生長度爲len(a)+ len(b)的新列表c = a + b。這可能不是最佳的。 – 2013-05-07 11:47:33

+0

確實如此,但優化並不是OP問題的一部分......無論如何,這對合並現代計算機上的兩個列表並不重要。這可能是python包含這些糖的原因。另外,如果你真的想要一個最佳的解決方案,我建議以某種方式從python移到C。但這是事實,這不是最佳的。 – cedbeu 2013-05-07 20:19:09