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.
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.
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():
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:
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:
enumerate() liefert (Index, Wert)-Paare. Die doppelte Variable nach for entpackt das Paar in zwei Namen — index und color. Viel sauberer als:
Willst du bei 1 statt bei 0 zählen, übergib start=1:
Python zip: gemeinsam über zwei Sequenzen iterieren
Wenn du zwei gleich lange Listen hast und sie paaren willst:
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:
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:
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:
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.
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:
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:
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.