Menu

Python-for-Schleifen: über Listen, Strings, Ranges und Dicts iterieren

Wie Pythons for-Schleife funktioniert — iterieren über Listen, Strings, Ranges, Dictionaries und alles andere Iterierbare, plus break, continue und else.

Pythons for-Schleife ist „for each“

Wenn du eine C-artige Sprache genutzt hast, sieht Pythons for-Schleife anders aus. Es gibt kein for (i = 0; i < n; i++)-Zählermuster. Pythons for ist strikt eine for-each-Schleife: du gibst ihr eine Sammlung, und sie reicht dir die Elemente einzeln.

main.py
Output
Click Run to see the output here.

Das gibt drei Zeilen aus. Python liest die Liste, holt jedes Element der Reihe nach heraus und bindet es an color, während der Rumpf läuft. Wenn nichts mehr übrig ist, endet die Schleife.

Beachte die Form — for <Name> in <Iterable>: gefolgt von einem eingerückten Rumpf. Einrückung, Doppelpunkt, Rumpf; dieselbe Struktur wie if.

Was als iterierbar zählt

Praktisch alles, was eine Folge von Werten enthält. Listen, Tupel, Strings, Ranges, Dicts, Sets, Dateien und die meisten eigenen Objekte, die du bauen wirst.

main.py
Output
Click Run to see the output here.

Die Einheitlichkeit ist der schöne Teil — eine Syntax, viele Datenformen.

Zählen mit range()

Willst du doch einen Zähler — „mach das zehnmal“ oder „schleife durch die Indizes 0 bis 9“ —, nimm range():

main.py
Output
Click Run to see the output here.

Das gibt 0, 1, 2, 3, 4 aus. range(stop) zählt von 0 bis (aber ohne) stop. range(start, stop) lässt dich den Startwert setzen, und range(start, stop, step) steuert die Schrittweite:

main.py
Output
Click Run to see the output here.

Es gibt eine eigene Seite zu range, weil es sich lohnt, ihn etwas tiefer zu verstehen. Für jetzt: range(n) gibt dir n Iterationen, nummeriert von 0 bis n-1.

Python enumerate: Schleifen mit Index

Ein häufiger Bedarf: „Ich will Index und Wert zusammen“. Der Einsteiger-Instinkt ist range(len(...)), aber Python hat ein schöneres Werkzeug:

main.py
Output
Click Run to see the output here.

enumerate() liefert (Index, Wert)-Paare. Die doppelte Variable nach for entpackt das Paar in zwei Namen — index und color. Viel sauberer als:

main.py
Output
Click Run to see the output here.

Willst du bei 1 statt bei 0 zählen, übergib start=1:

main.py
Output
Click Run to see the output here.

Python zip: gemeinsam über zwei Sequenzen iterieren

Wenn du zwei gleich lange Listen hast und sie paaren willst:

main.py
Output
Click Run to see the output here.

zip stoppt an der kürzesten Sequenz. Soll es weiterlaufen und mit None auffüllen, nimm itertools.zip_longest.

Ein Dict iterieren

Dictionaries geben dir die Wahl, worüber du schleifen willst:

main.py
Output
Click Run to see the output here.

Meistens willst du .items() — du bekommst Schlüssel und Wert gemeinsam in einer lesbaren Zeile.

break und continue

Manchmal willst du früh aussteigen oder eine Iteration überspringen.

break verlässt die Schleife sofort:

main.py
Output
Click Run to see the output here.

Sobald eine Zahl über 6 gefunden wird, stoppt die Schleife. Die restlichen Elemente werden ignoriert.

continue überspringt den Rest der aktuellen Iteration und geht zur nächsten:

main.py
Output
Click Run to see the output here.

Beides ist okay, obwohl mehrere continue eine Schleife schwer verfolgbar machen. Oft liest sich ein schlichtes if/else besser.

Die else-Klausel an einer Schleife

Python hat ein Feature, das die meisten Sprachen nicht haben: eine else-Klausel an Schleifen. Sie läuft, wenn die Schleife ohne break komplett durchläuft.

main.py
Output
Click Run to see the output here.

Nützlich, aber anfangs verwirrend. Fühl dich nicht verpflichtet, es zu nutzen — ein boolescher Flag außerhalb der Schleife ist für neue Leser oft klarer.

Eine Liste während der Iteration verändern

Eine Falle, die Erwähnung verdient: füge nichts zu einer Liste hinzu und entferne nichts, während du sie iterierst. Die Iteration wird durcheinanderkommen, welche Indizes noch gültig sind, und du verpasst entweder Elemente oder stolperst in einen Fehler. Das sichere Muster ist, eine neue Liste zu bauen:

main.py
Output
Click Run to see the output here.

Oder, sobald du dich wohlfühlst, macht eine List Comprehension dasselbe in einer Zeile — das kommt im Kapitel Sammlungen.

Ein kleines Beispiel von Anfang bis Ende

Ein paar Dinge zusammenknüpfen — Liste lesen, filtern, enumerieren, ausgeben:

main.py
Output
Click Run to see the output here.

Als Nächstes: while-Schleifen

for ist die richtige Wahl, wenn du weißt, worüber du iterierst. while ist die richtige Wahl, wenn du schleifst, bis sich eine Bedingung ändert — das kommt als Nächstes.

Häufig gestellte Fragen

Wie funktioniert eine for-Schleife in Python?

for item in sequence: führt den eingerückten Rumpf einmal für jedes Element der Sequenz aus, wobei item der Reihe nach jeden Wert annimmt. Sequenzen sind Listen, Tupel, Strings, Dicts, Ranges und jedes Objekt, das einen Iterator definiert.

Was ist der Unterschied zwischen break und continue?

break verlässt die Schleife sofort und überspringt verbleibende Iterationen. continue überspringt den Rest der aktuellen Iteration und geht zur nächsten. break heißt „ich bin fertig“; continue heißt „diese hier überspringen“.

Wie schleife ich in Python mit einem Index?

Pack die Sequenz in enumerate(...), um (Index, Wert)-Paare zu erhalten: for i, item in enumerate(items):. Viel sauberer, als einen eigenen Zähler mit i += 1 am Ende der Schleife zu pflegen.

Lerne mit Coddy zu programmieren

LOS GEHT'S