2013-01-11 23 views

Odpowiedz

11

lista konkatenacji jest po prostu zrobić z operatorem +.

tak

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

print total 
+0

Jest to najlepsze rozwiązanie, ponieważ jest to najprostszy. +1. Możesz jednak po prostu: 'nowa_lista = stara_lista1 + stara_lista2'. Twoje ma to samo, ale nie musisz najpierw umieszczać ich na liście list. –

+0

Tak, chciałem tylko, żeby działał na dowolną listę. Odkąd nauczyłem się, możesz zrobić coś takiego jak 'sum ([], [list1, list2, list3])', a ponieważ suma wywołuje operator +, który dla '[]' jest opcją łączenia, to połączy je wszystkie dla Ciebie. – will

3

to zrobi:

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

DLACZEGO ?! to jest całkowicie przesadzone, dlaczego nie po prostu zrobić "a = [[" a "," b "," c "], [" d "," e "," f "]]' 'a [0] + a [1] ' – will

+0

Czy to zadziała, jeśli lista brzmi" [[a "," b "," c "], [" d "," e "," f "], [" d "," e "," f "]]? – Sibi

+0

oczywiście nie, ale nie o to chodziło, a jeśli chcesz, żeby działał dla dowolnie długich zestawów list płaskich, wtedy [moja odpowiedź] (http://stackoverflow.com/a/14278710/432913) działa i jest o wiele bardziej czytelny – will

2

Spróbuj:

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

albo dłużej, ale szybciej:

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

Albo użyć itertools.chain jak @AshwiniChaudhary zasugerował:

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

'sum()' nie powinno być używane do takich rzeczy. Jak [docs] (http://docs.python.org/2/library/functions.html#sum) mówią: ** Aby połączyć serię iterables, rozważ użycie itertools.chain(). ** –

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

Zakłada masz listę długości statycznej i zawsze chcesz połączyć dwa pierwsze

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

Korzystanie listowych:

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

To jest najszybszy sposób, fwiw. Pod względem cykli procesora. –

+1

Całkowicie najlepszy sposób, ponieważ jest najbardziej kompaktowy. Ale jak to działa? –

1

Wypróbuj metodę "rozszerzania" obiektu listy:

>>> 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] 

Albo krócej:

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