2012-04-09 10 views
32

Załóżmy, że mam dwie lub więcej list o tej samej długości. Jaki jest dobry sposób na ich iterację?Lepszy sposób na powtarzanie dwóch lub wielu list jednocześnie.

a, b to listy.

for i, ele in enumerate(a): 
    print ele, b[i] 

lub

for i in range(len(a)): 
    print a[i], b[i] 

czy jest jakiś wariant mi brakuje?

Czy są jakieś szczególne zalety używania jednego nad drugim?

Odpowiedz

76

Zwykłym sposobem jest użycie zip():

for x, y in zip(a, b): 
    # x is from a, y is from b 

ten zatrzyma się, gdy krótszy z dwóch iterables a i b została wyczerpana. Warto również zauważyć: itertools.izip() (tylko Python 2) i itertools.izip_longest() (itertools.zip_longest() w Pythonie 3).

+4

beat mnie do niego. Warto zauważyć, że 'zip' * w Pythonie 3 to *' izip'. Nie ma też "zip_longest", ale 'map (None, a, b)' może zrobić. – ephemient

+2

@ephemient: Ta ostatnia tylko ponownie w Pythonie 2. W Pythonie 3 zatrzyma się na najkrótszej sekwencji. Natomiast 'izip_longest()' jest nazywane 'zip_longest()' na Pythonie 3 ... –

7

Można użyć zip:

>>> a = [1, 2, 3] 
>>> b = ['a', 'b', 'c'] 
>>> for x, y in zip(a, b): 
... print x, y 
... 
1 a 
2 b 
3 c 
Powiązane problemy