Python enumerate() Funktion, erklärt mit Beispielen

In diesem Tutorial erfahren Sie, wie Sie die Funktion enumerate() in Python verwenden.

Die Funktion enumerate() in Python bietet eine prägnante Syntax für den Zugriff auf die Elemente in einem Iterable zusammen mit ihren Indizes.

Wir beginnen damit, uns anzusehen, wie man mit einfachen Schleifen auf Elemente und Indizes zugreift, und fahren dann damit fort, die Syntax der enumerate()-Funktion von Python zu lernen. Wir werden nebenbei auch Beispiele codieren.

Lass uns anfangen.

So iterieren Sie mit der for-Schleife in Python

Jedes Python-Objekt, über das Sie iterieren und auf dessen einzelne Elemente zugreifen können – eines nach dem anderen – wird als iterierbar bezeichnet. Daher sind Python-Listen, Tupel, Wörterbücher und Zeichenfolgen alle iterierbar.

Nehmen wir ein Beispiel für eine Einkaufsliste, die in der Codezelle unten definiert ist.

shopping_list = ["fruits","cookies","cereals","protein bars","post-it notes"]

In Python können Sie die for-Schleife verwenden, um alle Iterablen zu durchlaufen. Die Syntax dazu lautet wie folgt:

for item in <iterable>:
    # do something on item

# item: looping variable
# <iterable>: any Python iterable: list, tuple, dictionary, string, and so on.

Lassen Sie uns nun mit dieser Syntax die Einkaufsliste durchlaufen und auf die einzelnen Artikel zugreifen.

for item in shopping_list:
  print(item)

# Output
fruits
cookies
cereals
protein bars
post-it notes

Dieses Konstrukt hilft Ihnen, direkt auf die Elemente zuzugreifen. Manchmal müssen Sie jedoch zusätzlich zu den Elementen selbst auf den Index der Elemente zugreifen.

Sie können eine Indexvariable verwenden, die Sie wie unten gezeigt im Schleifenkörper inkrementieren können:

index = 0
for item in shopping_list:
  print(f"index:{index}, {item}")
  index += 1

# Output
index:0, fruits
index:1, cookies
index:2, cereals
index:3, protein bars
index:4, post-it notes

Dies ist jedoch nicht die effizienteste Methode. Wenn Sie nicht daran denken, den Index zu erhöhen, funktioniert Ihr Code nicht wie erwartet.

index = 0
for item in shopping_list:
  print(f"index:{index}, {item}")
  # no update of index inside loop body
  # index is never updated and is always 0

# Output
index:0, fruits
index:0, cookies
index:0, cereals
index:0, protein bars
index:0, post-it notes

Ein weiteres häufiges Muster für die Verwendung der for-Schleife ist die Verbindung mit der Funktion range(). Das erfahren wir im nächsten Abschnitt.

So verwenden Sie die Funktion range () für den Zugriff auf den Index

Pythons eingebaute Funktion len() gibt die Länge eines beliebigen Python-Objekts zurück. Sie können also die Funktion len() mit dem Argument shopping_list aufrufen, um die Länge der Einkaufsliste zu erhalten (in diesem Fall 5).

len(shopping_list)
# Output: 5

Die Funktion range() gibt ein Range-Objekt zurück, das Sie dann in einer Schleife verwenden können. Wenn Sie range(stop) durchlaufen, erhalten Sie die Indizes 0, 1, 2, …, stop-1.

  So verwenden Sie Ihr iPad als sekundäres Mac-Display ohne Sidecar

Durch Setzen von stop = len(list) erhalten Sie die Liste der gültigen Indizes. Wenn Sie also die Funktion range() verwenden, können Sie auf den Index sowie auf das entsprechende Element zugreifen, wie unten gezeigt.

for index in range(len(shopping_list)):
  print(f"index:{index}, item: {shopping_list[index]}")

# Output
index:0, item: fruits
index:1, item: cookies
index:2, item: cereals
index:3, item: protein bars
index:4, item: post-it notes

Dies ist jedoch nicht die empfohlene Pythonic-Methode, um gleichzeitig auf Indizes und Elemente zuzugreifen.

Syntax der Python-enumerate()-Funktion

Mit der Funktion enumerate() von Python können Sie mit der folgenden allgemeinen Syntax auf die Elemente zusammen mit ihren Indizes zugreifen:

enumerate(<iterable>, start = 0)

In der obigen Syntax:

  • ist ein erforderlicher Parameter und kann ein beliebiges Python-Iterable sein, z. B. eine Liste oder ein Tupel.
  • start ist ein optionaler Parameter, der den Index steuert, bei dem die Zählung beginnt. Wenn Sie den Wert von start nicht angeben, ist er standardmäßig null.

Sie können jetzt die Funktion enumerate() mit shopping_list aufrufen und sie gibt ein enumerate-Objekt zurück, wie in der Codezelle unten gezeigt.

enumerate(shopping_list)
<enumerate at 0x7f91b4240410>

Sie können das Aufzählungsobjekt nicht durchlaufen. Konvertieren wir also das Aufzählungsobjekt in eine Python-Liste.

list(enumerate(shopping_list))

# Output
[(0, 'fruits'),
 (1, 'cookies'),
 (2, 'cereals'),
 (3, 'protein bars'),
 (4, 'post-it notes')]

Eine andere Methode für den Zugriff auf die Elemente des Enumerate-Objekts ist der Aufruf von the next()-Funktion mit dem Aufzählungsobjekt als Argument. In Python gibt die Funktion next() das nächste Element von einem Iterator zurück.

Intern funktioniert die Funktion next(), indem sie die Methode __next__ für das Iteratorobjekt aufruft, um die aufeinanderfolgenden Elemente abzurufen.

Lassen Sie uns das Aufzählungsobjekt der Variablen shopping_list_enum zuweisen.

shopping_list_enum = enumerate(shopping_list)

Wenn Sie next() zum ersten Mal mit shopping_list_enum aufrufen, erhalten Sie Index null und das Element bei Index 0: das Tupel (0, ‚fruits‘).

Wenn Sie weitere Aufrufe der Funktion next() durchführen, erhalten Sie die aufeinanderfolgenden Elemente zusammen mit ihren Indizes, wie unten beschrieben.

next(shopping_list_enum)
# (0, 'fruits')
next(shopping_list_enum)
# (1, 'cookies')
next(shopping_list_enum)
# (2, 'cereals')
next(shopping_list_enum)
# (3, 'protein bars')
next(shopping_list_enum)
# (4, 'post-it notes')

Was passiert, wenn Sie die Funktion next() aufrufen, nachdem Sie auf alle Elemente zugegriffen haben und das Ende der Liste erreicht haben? Sie erhalten einen StopIteration-Fehler.

next(shopping_list_enum)
# ---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-16-4220f68f6c7e> in <module>()
----> 1 next(shopping_list_enum)

StopIteration:

Die Funktion enumerate() gibt die aufeinanderfolgenden Indizes und Elemente nur bei Bedarf zurück und werden nicht im Voraus berechnet. In Python-Projekten, in denen Sie die Speichereffizienz berücksichtigen müssen, können Sie versuchen, die Funktion enumerate() zu verwenden, wenn Sie große Iterables durchlaufen müssen.

Python enumerate() Funktionsbeispiele

Nachdem wir nun die Syntax zur Verwendung der Funktion enumerate() gelernt haben, wollen wir die for-Schleife ändern, die wir zuvor hatten.

Aus dem vorherigen Abschnitt wissen wir, dass das Durchlaufen des Enumerate-Objekts ein Tupel mit dem Index und dem Element zurückgibt. Wir können dieses Tupel in zwei Variablen entpacken: index und item.

for index, item in enumerate(shopping_list):
  print(f"index:{index}, item:{item}")

# Output
index:0, item:fruits
index:1, item:cookies
index:2, item:cereals
index:3, item:protein bars
index:4, item:post-it notes

Sehen wir uns als Nächstes an, wie Sie einen benutzerdefinierten Startwert angeben.

So enumerate() mit benutzerdefiniertem Startwert

Python folgt der Nullindizierung, daher ist der Startwert standardmäßig 0. Wenn Sie die Indizes jedoch in menschenlesbarer Form benötigen – beginnend mit 1 oder einem beliebigen anderen Index Ihrer Wahl – können Sie einen benutzerdefinierten Startwert angeben.

Wenn Sie im Beispiel mit der Einkaufsliste mit dem Zählen bei 1 beginnen möchten, setzen Sie start = 1.

for index, item in enumerate(shopping_list,1):
  print(f"index:{index}, item:{item}")

# Output
index:1, item:fruits
index:2, item:cookies
index:3, item:cereals
index:4, item:protein bars
index:5, item:post-it notes

Wenn Sie jedoch den benutzerdefinierten Startwert angeben, sollten Sie ihn unbedingt als zweites Positionsargument angeben.

Wenn Sie versehentlich die Reihenfolge des iterierbaren und des Startwerts vertauschen, würde ein Fehler auftreten, wie in der folgenden Codezelle erläutert.

for index, item in enumerate(1,shopping_list):
  print(f"index:{index}, item:{item}")

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-12-5dbf7e2749aa> in <module>()
----> 1 for index, item in enumerate(1,shopping_list):
      2   print(f"index:{index}, item:{item}")

TypeError: 'list' object cannot be interpreted as an integer

Um solche Fehler zu vermeiden, können Sie start als Schlüsselwortargument angeben, wie unten gezeigt.

for index, item in enumerate(shopping_list, start = 1):
  print(f"index:{index}, item:{item}")

# Output
index:1, item:fruits
index:2, item:cookies
index:3, item:cereals
index:4, item:protein bars
index:5, item:post-it notes

Bisher haben Sie gelernt, wie Sie die Funktion enumerate() mit Python-Listen verwenden. Sie können auch die enumerate-Funktion verwenden, um Python-Strings, Wörterbücher und Tupel zu durchlaufen.

So verwenden Sie die Funktion enumerate () mit Python-Tupeln

Angenommen, shopping_list ist ein Tupel. In Python sind Tupel ebenfalls Sammlungen – ähnlich wie Python-Listen, aber sie sind unveränderlich. Daher können Sie sie nicht ändern, und der Versuch, dies zu tun, führt zu Fehlern.

Das folgende Code-Snippet initialisiert shopping_list als Tupel.

shopping_list = ("fruits","cookies","cereals","protein bars","post-it notes")
type(shopping_list)
# Tuple

Wenn Sie versuchen, das erste Element im Tupel zu ändern, erhalten Sie eine Fehlermeldung, da ein Python-Tupel eine unveränderliche Sammlung ist.

shopping_list[0] = 'vegetables'

# Output
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-ffdafa961600> in <module>()
----> 1 shopping_list[0] = 'vegetables'

TypeError: 'tuple' object does not support item assignment

▶ Führen Sie nun das folgende Code-Snippet aus, um zu überprüfen, ob die Funktion enumerate() wie erwartet mit Tupeln funktioniert.

shopping_list = ("fruits","cookies","cereals","protein bars","post-it notes")
for index, item in enumerate(shopping_list):
    print(f"index:{index}, item:{item}")

So verwenden Sie die Funktion enumerate() mit Python-Strings

Sie können auch die Python-Funktion enumerate() verwenden, um Zeichenfolgen zu durchlaufen und gleichzeitig auf die Zeichen und Indizes zuzugreifen.

Hier ist ein Beispiel.

py_str="Butterfly"
for index, char in enumerate(py_str):
  print(f"index {index}: {char}")

# Output
index 0: B
index 1: u
index 2: t
index 3: t
index 4: e
index 5: r
index 6: f
index 7: l
index 8: y

Aus der obigen Ausgabe sehen wir, dass die Zeichen zusammen mit ihren Indizes (0-8) ausgedruckt wurden.

Fazit👩🏽‍💻

Hier ist eine Zusammenfassung dessen, was Sie gelernt haben.

  • Sie können for-Schleifen verwenden, um auf die Elemente zuzugreifen und eine separate Zähler- oder Indexvariable zu verwalten.
  • Wenn Sie möchten, können Sie die Funktion range() verwenden, um die gültigen Indizes abzurufen und auf die Elemente zuzugreifen, indem Sie in die Liste indizieren.
  • Als empfohlene pythonische Methode können Sie die enumerate()-Funktion von Python mit der folgenden Syntax verwenden: enumerate(iterable). Standardmäßig beginnt die Zählung oder der Index bei 0.
  • Sie können den benutzerdefinierten Startwert mit der Syntax enumerate(iterable, start) angeben, um den Index ab dem Wert start und den entsprechenden Elementen abzurufen.
  • Sie können die Aufzählungsfunktion verwenden, wenn Sie mit Tupeln, Zeichenfolgen, Wörterbüchern und im Allgemeinen mit allen iterierbaren Python-Dateien arbeiten.

Ich hoffe, Sie fanden dieses Tutorial zur Funktion enumerate() hilfreich. Als Nächstes erfahren Sie, wie Sie den Index eines Elements in Python-Listen finden. Codieren Sie weiter!

  HDMI 2.1: Was ist neu und müssen Sie aktualisieren?