Iterieren Sie eine Liste mit Indizes [duplicate]

Lesezeit: 2 Minuten

Benutzeravatar von Slava V
Slava V

Ich könnte schwören, dass ich die Funktion (oder Methode) gesehen habe, die eine Liste wie diese akzeptiert [3, 7, 19] und macht daraus eine iterierbare Liste von Tupeln, etwa so: [(0,3), (1,7), (2,19)] es zu verwenden statt:

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

aber ich kann mich nicht an den Namen erinnern und das Googeln von „Liste iterieren“ bringt nichts.

Benutzeravatar von Vinko Vrsalovic
Vinko Vrsalovic

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

Benutzeravatar von PierreBdR
PierreBdR

Ja, das wäre das enumerate Funktion! Oder genauer gesagt, Sie müssen Folgendes tun:

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

[(0, 3), (1, 7), (2, 19)]

  • Manchmal stellen die Leute eine Frage, die sich auf die Frage bezieht, die sie wirklich wollen, ein anderes Mal sind sie etwas wahllos, was „am besten“ bedeutet.

    – msw

    7. Juni 2012 um 10:25

  • Und manchmal lesen die Leute nur die ersten eineinhalb Zeilen der Frage und nicht die ganze Frage. Wenn Sie am Ende der zweiten Zeile angelangt sind, sagt er, dass er sie stattdessen verwenden möchte for i in range(len(name_of_list)): Aus diesem Grund habe ich anstelle des im ersten Teil gezeigten Beispiels ein for bereitgestellt.

    – Vinko Vrsalovic

    27. September 2012 um 9:29

  • @HumphreyBogart Weil Lauren Bacall es mag, ausführlicher zu sein.

    – WestCoastProjects

    25. Januar 2015 um 7:36 Uhr


S.Lotts Benutzeravatar
S. Lott

Hier ist ein anderer, der das verwendet zip Funktion.

>>> a = [3, 7, 19]
>>> zip(range(len(a)), a)
[(0, 3), (1, 7), (2, 19)]

  • enumerate() ist meiner Meinung nach etwas eleganter.

    – Nathan Fellman

    7. September 2009 um 5:35

  • @Nathan: Aber zip() ist allgemeiner und funktioniert für beliebige Listenpaare, also ist es gut zu wissen.

    – ShreevatsaR

    12. Mai 2011 um 13:30 Uhr

  • zip können Sie die Werte umgekehrt eingeben, wenn dies zu einem klareren Gesamtalgorithmus führt.

    – Karl Knechtel

    8. August 2022 um 0:53

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

Python enumerate Die Funktion wird Ihren Anforderungen gerecht

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

Ausgang

[(0, 1), (1, 3), (2, 7),(3,12)]

Benutzer-Avatar von Sнаđошƒаӽ
Schön

Wenn Sie mehrere Listen haben, können Sie diese kombinieren enumerate Und 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)

Ausgang:

0 1 10 100
1 2 20 200
2 3 30 300
3 4 40 400
4 5 50 500

Beachten Sie, dass danach Klammern erforderlich sind i. Andernfalls erhalten Sie die Fehlermeldung: ValueError: need more than 2 values to unpack

1450180cookie-checkIterieren Sie eine Liste mit Indizes [duplicate]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy