2012-01-08 8 views
7

+ =演算子を使うことができるときにextendを使うのはなぜですか?どちらの方法が最適ですか? はまた、何が1つのリストに複数のリストを結合する最良の方法だなぜpythonリストを拡張する

#my prefered way 
_list=[1,2,3] 
_list+=[4,5,6] 
print _list 
#[1, 2, 3, 4, 5, 6] 

#why use extend: 
_list=[1,2,3] 
_list.extend([4,5,6]) 
print _list 
#[1, 2, 3, 4, 5, 6] 



_lists=[range(3*i,3*i+3) for i in range(3)] 
#[[0, 1, 2], [3, 4, 5], [6, 7, 8]] 

#my prefered way of merging lists 
print sum(_lists,[]) 
#[0, 1, 2, 3, 4, 5, 6, 7, 8] 


#is there a better way? 
from itertools import chain 
print list(chain(*_lists)) 
#[0, 1, 2, 3, 4, 5, 6, 7, 8] 

答えて

16

+=のみextend反復可能なオブジェクトによって1つのリストを拡張するために使用することができながら、で別のリストを1つのリストを拡張するために使用することができ

あなたは

a = [1,2,3] 
a.extend(set([4,5,6])) 

行うことができますが、

[item for sublist in l for item in sublist] is faster. 

Making a flat list out of list of lists in Python

+0

ありがとう!それはかなり釘です。 _list + = list(_iterable)は同等ですか? –

+1

同じ結果が得られますが、基本的な実装は異なります。 – qiao

1

あなたがかもしれextend() pytho参照2番目の質問について

a = [1,2,3] 
a += set([4,5,6]) 

を行うことはできませんnリスト以外のオブジェクトをイテレータとしてリストします。イテレータは値を格納するのではなく、ある値を一度反復するオブジェクトです。イテレータの詳細hereこのスレッドで

、イテレータが extend()メソッドの引数として使用されている例があります: append vs. extend

関連する問題