2013-01-11 21 views

risposta

11

lista concatenazione è appena fatto con l'operatore +.

così

total = [] 
for i in [['a','b','c'],['d','e','f']]: 
    total += i 

print total 
+0

Questa è la soluzione migliore, in quanto è il più semplice. +1. Tuttavia, puoi semplicemente fare: 'new_list = old_list1 + old_list2'. Il tuo fa la stessa cosa, ma non è necessario metterli insieme in una lista di liste prima. –

+0

Sì, volevo solo che funzionasse per una lista arbitraria. Da allora ho imparato che puoi fare qualcosa come 'sum ([], [list1, list2, list3])', e dato che sum chiama l'operatore +, che per '[]' è l'operazione di concatenazione, si unirà a tutti per te. – will

3

Questo farebbe:

a = [['a','b','c'],['d','e','f']] 
reduce(lambda x,y:x+y,a) 
+0

PERCHÉ ?! questo è completamente sopra le righe, perché non fare solo 'a = [['a', 'b', 'c'], ['d', 'e', ​​'f']]' 'a [0] + a [1] ' – will

+0

Funzionerà se la lista fosse' [['a', 'b', 'c'], ['d', 'e', ​​'f'], ['d', 'e ',' f ']]? – Sibi

+0

ovviamente no, ma non è questa la domanda, e se vuoi che funzioni per serie arbitrariamente lunghe di liste piatte, allora [la mia risposta] (http://stackoverflow.com/a/14278710/432913) funziona e è molto più leggibile – will

2

Prova:

sum([['a','b','c'], ['d','e','f']], []) 

o più a lungo ma più veloce:

[i for l in [['a', 'b', 'c'], ['d', 'e', 'f']] for i in l] 

Oppure utilizzare itertools.chain come @AshwiniChaudhary suggerito:

list(itertools.chain(*[['a', 'b', 'c'], ['d', 'e', 'f']])) 
+4

'sum()' non dovrebbe essere usato per queste cose. Come [docs] (http://docs.python.org/2/library/functions.html#sum) dì: ** Per concatenare una serie di iterabili, considera l'uso di itertools.chain(). ** –

0
mergedlist = list_letters[0] + list_letters[1] 

Ciò presuppone di avere una lista di lunghezza statica e hai sempre voglia di unire i primi due

>>> list_letters=[['a','b'],['c','d']] 
>>> list_letters[0]+list_letters[1] 
['a', 'b', 'c', 'd'] 
9

Utilizzando lista di comprensione:

ar = [['a','b','c'],['d','e','f']] 
concat_list = [j for i in ar for j in i] 
+0

Questo è il modo più veloce, fww. In termini di cicli cpu. –

+1

Totalmente il modo migliore, in quanto è il più compatto. Ma come funziona? –

1

Provare il metodo "estendi" di un oggetto elenco:

>>> res = [] 
>>> for list_to_extend in range(0, 10), range(10, 20): 
     res.extend(list_to_extend) 
>>> res 
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19] 

o più corto:

>>> res = [] 
>>> map(res.extend, ([1, 2, 3], [4, 5, 6])) 
>>> res 
[1, 2, 3, 4, 5, 6]