2013-12-15 19 views
14

Czy istnieje bardziej zwięzły sposób robienia następujących rzeczy?Dodaj wszystkie elementy do iteracji do listy

t = (1,2,3) 
t2 = (4,5) 

l.addAll(t) 
l.addAll(t2) 
print l # [1,2,3,4,5] 

Oto, co próbowałem do tej pory: Wolałbym uniknąć podania na liście parametrów.

def t_add(t,stuff): 
    for x in t: 
     stuff.append(x) 
+0

Przypuszczalnie chcesz istniejące wstępne elementy 'L' być nadal istnieje, jeśli' l' nie był pusty, prawda? –

+0

@MartijnPieters tak –

Odpowiedz

27

Zastosowanie list.extend() nie list.append() aby dodać wszystkie obiekty z iterable do listy:

l.extend(t) 
l.extend(t2) 

lub

l.extend(t + t2) 

lub nawet:

l += t + t2 

gdzie list.__iadd__ (lokalny dodatek) jest zaimplementowany pod maską jako list.extend().

Demo:

>>> l = [] 
>>> t = (1,2,3) 
>>> t2 = (4,5) 
>>> l += t + t2 
>>> l 
[1, 2, 3, 4, 5] 

Jeśli jednak po prostu chciał stworzyć listę t + t2, następnie list(t + t2) byłaby najkrótsza droga aby się tam dostać.

+1

Jestem nowszy w Pythonie, więc może to być naiwne pytanie, ale skąd wiedziałeś, że działa to w przypadku dowolnych iteracji, a nie tylko list? [Dokumentacja] (https://docs.python.org/3/tutorial/datastructures.html) mówi (podkreślenie dodane) "* list.extend (L) Rozszerz listę, dołączając wszystkie elementy w ** danym lista **. Odpowiednik 'a [len (a):] = L'. *" To może być udokumentowane, ale nie jestem pewien gdzie ... Widzę [Widoki i Iteratory zamiast list] (https://docs.python.org/3/whatsnew/3.0.html#views-and-iterators-instead-of-lists), ale to raczej "co się zmieniło?" wejście. –

4

stuff.extend jest to, co chcesz.

t = [1,2,3] 
t2 = [4,5] 
t.extend(t2) 
# [1, 2, 3, 4, 5] 

Albo można zrobić

t += t2 
Powiązane problemy