2012-01-08 16 views
7

Perché utilizzare l'estensione quando è sufficiente utilizzare l'operatore + =? Quale metodo è il migliore? Anche ciò che è il modo migliore di unire più liste in una listaperché estendere un elenco 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] 

risposta

16

+= può essere utilizzato solo per estendere una lista da un'altra lista, mentre extend può essere utilizzato per estendere una lista da un oggetto iterabile

ad es.

si può fare

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

, ma non si può fare

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

Per la seconda domanda

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

vedere Making a flat list out of list of lists in Python

+0

Grazie! Questo praticamente lo inchioda. È _list + = list (_iterable) equivalente? –

+1

È possibile ottenere lo stesso risultato, ma l'implementazione sottostante sarà diversa. – qiao

1

Si può extend() un Pytho n lista con un oggetto non-list come iteratore. Un iteratore non sta memorizzando alcun valore, ma un oggetto per iterare una volta su alcuni valori. Altro su iteratori here.

In questa discussione, vi sono esempi in cui un iteratore viene utilizzato come parametro di extend() metodo: append vs. extend

Problemi correlati