Iterieren Sie eine Liste mit Indizes in Python

203

Ich könnte schwören, dass ich die Funktion (oder Methode) gesehen habe, die eine Liste wie diese aufnimmt [3, 7, 19]und sie in eine iterierbare Liste von Tupeln verwandelt, wie folgt: [(0,3), (1,7), (2,19)]Verwenden Sie sie anstelle von:

for i in range(len(name_of_list)):
    name_of_list[i] = something

aber ich kann mich nicht an den Namen erinnern und googeln "iterate list" bekommt nichts.

Slava V.
quelle

Antworten:

354
>>> a = [3,4,5,6]
>>> for i, val in enumerate(a):
...     print i, val
...
0 3
1 4
2 5
3 6
>>>
Vinko Vrsalovic
quelle
107

Ja, das wäre die enumerateFunktion! Oder mehr auf den Punkt, müssen Sie tun:

list(enumerate([3,7,19]))

[(0, 3), (1, 7), (2, 19)]
PierreBdR
quelle
2
Manchmal stellen die Leute eine Frage, die sich auf die bezieht, die sie wirklich wollen, manchmal sind sie etwas wahllos darüber, was "am besten" bedeutet.
Msw
3
Und manchmal lesen die Leute nur die ersten anderthalb Zeilen der Frage anstatt der ganzen Frage. Wenn Sie am Ende der zweiten Zeile angelangt sind, sagt er, dass er sie verwenden möchte. Stattdessen habe for i in range(len(name_of_list)):ich ein Beispiel mit einem für anstelle des im ersten Teil gezeigten angegeben.
Vinko Vrsalovic
1
@ HumphreyBogart Weil Lauren Bacall gerne ausführlicher ist.
Javadba
25

Hier ist eine andere, die die zipFunktion verwendet.

>>> a = [3, 7, 19]
>>> zip(range(len(a)), a)
[(0, 3), (1, 7), (2, 19)]
S.Lott
quelle
10
enumerate()ist ein bisschen eleganter, denke ich.
Nathan Fellman
14
@ Nathan: Aber zip () ist allgemeiner und funktioniert für beliebige Listenpaare, also ist es gut zu wissen.
ShreevatsaR
8

Hier ist es eine Lösung mit Kartenfunktion:

>>> a = [3, 7, 19]
>>> map(lambda x: (x, a[x]), range(len(a)))
[(0, 3), (1, 7), (2, 19)]

Und eine Lösung mit Listenverständnis:

>>> a = [3,7,19]
>>> [(x, a[x]) for x in range(len(a))]
[(0, 3), (1, 7), (2, 19)]
Lucas Ribeiro
quelle
5

Die Python- enumerateFunktion wird Ihren Anforderungen gerecht

result = list(enumerate([1,3,7,12]))
print result

Ausgabe

[(0, 1), (1, 3), (2, 7),(3,12)]
Harun ERGUL
quelle
2

Wenn Sie mehrere Listen haben, können Sie diese kombinieren enumerateund zip:

list1 = [1, 2, 3, 4, 5]
list2 = [10, 20, 30, 40, 50]
list3 = [100, 200, 300, 400, 500]
for i, (l1, l2, l3) in enumerate(zip(list1, list2, list3)):
    print(i, l1, l2, l3)
Ausgabe:
0 1 10 100
1 2 20 200
2 3 30 300
3 4 40 400
4 5 50 500

Beachten Sie, dass nachher eine Klammer erforderlich ist i. Andernfalls erhalten Sie die Fehlermeldung:ValueError: need more than 2 values to unpack

Sнаđошƒаӽ
quelle