Python For-Schleifen
Python for-Schleifen verstehen: Syntax, range(), enumerate(), break, continue, else, verschachtelte Schleifen und Iteration über Listen, Strings und Dicts.
Eine for-Schleife in Python iteriert über jedes Element einer Sequenz — einer Liste, eines Tupels, eines Strings, eines Wörterbuchs, einer Menge oder eines anderen iterierbaren Objekts — und führt für jedes Element einen Codeblock aus. Anders als in Sprachen, wo for typischerweise Zahlen zählt, ist Pythons for eine for-each-Schleife, die direkt über Elemente läuft.
Dieses Kapitel behandelt:
- Grundlegende Syntax und wie die Schleifenvariable funktioniert
- Die
range()-Funktion für Zählschleifen break,continueund dieelse-Klauselenumerate()undzip()für reichhaltigere Iteration- Iteration über Strings, Wörterbücher und verschachtelte Strukturen
- Verschachtelte
for-Schleifen - Die
pass-Anweisung als Platzhalter
Grundlegende Syntax
for variable in iterable:
# block executed once per itemvariable wird jedes aufeinanderfolgende Element aus iterable zugewiesen. Der eingerückte Block wird einmal für jedes Element ausgeführt.
Über eine Liste iterieren
Ausgabe:
apple
banana
cherryDie Schleife weist fruit den Wert "apple" zu, führt print(fruit) aus, geht dann zu "banana" über und so weiter, bis alle Elemente durchlaufen wurden.
Über einen String iterieren
Ein string ist selbst ein iterierbares Objekt — jedes Zeichen ist ein Element:
for ch in "Python":
print(ch)Ausgabe:
P
y
t
h
o
nDie range()-Funktion
range() erzeugt bei Bedarf eine Folge von ganzen Zahlen. Es ist die gebräuchlichste Methode, um eine Schleife eine bestimmte Anzahl von Malen auszuführen.
range(stop)
range(start, stop)
range(start, stop, step)| Parameter | Standard | Bedeutung |
|---|---|---|
start | 0 | Erster Wert (inklusive) |
stop | erforderlich | Obere Grenze (exklusive) |
step | 1 | Schrittweite zwischen Werten |
Von 1 bis 5 zählen
Ausgabe:
1
2
3
4
5range(1, 6) erzeugt 1, 2, 3, 4, 5 — der Stoppwert 6 ist nicht enthalten.
In Schritten zählen
for i in range(0, 10, 2):
print(i)Ausgabe:
0
2
4
6
8Rückwärts zählen
Eine negative Schrittweite iteriert in umgekehrter Reihenfolge:
for i in range(10, 0, -2):
print(i)Ausgabe:
10
8
6
4
2Die break-Anweisung
break beendet die Schleife sofort, bevor alle Elemente besucht wurden.
for i in range(1, 6):
if i == 3:
break
print(i)Ausgabe:
1
2Sobald i gleich 3 ist, wird break ausgelöst und die Schleife stoppt — 3, 4 und 5 werden nie ausgegeben.
Wann break verwendet werden sollte: wenn man eine Liste durchsucht und stoppt, sobald eine Übereinstimmung gefunden wurde; beim vorzeitigen Abbruch einer langen Berechnung.
Die continue-Anweisung
continue überspringt den Rest der aktuellen Iteration und springt direkt zum nächsten Element.
for i in range(1, 6):
if i == 3:
continue
print(i)Ausgabe:
1
2
4
5Wenn i gleich 3 ist, überspringt continue den Aufruf print(i) und springt zu i = 4.
Die else-Klausel
Pythons for-Schleife unterstützt einen optionalen else-Block, der nur ausgeführt wird, wenn die Schleife normal abgeschlossen wurde (d. h. nicht durch break beendet wurde).
for i in range(1, 4):
print(i)
else:
print("Loop finished")Ausgabe:
1
2
3
Loop finishedWenn die Schleife über break beendet wird, wird der else-Block übersprungen:
for i in range(1, 6):
if i == 3:
break
print(i)
else:
print("Loop finished without break")Ausgabe:
1
2Die else-Klausel ist nützlich, um anzuzeigen, ob eine Suche erfolgreich war — wenn man bei einer Übereinstimmung break auslöst, wird der else-Block nur ausgeführt, wenn keine Übereinstimmung gefunden wurde.
enumerate() — Schleife mit Index und Wert
enumerate() verbindet jedes Element mit seinem Positionsindex, sodass man beides in einer Schleife erhält, ohne eine separate Zählervariable zu benötigen.
colors = ["red", "green", "blue"]
for index, color in enumerate(colors):
print(index, color)Ausgabe:
0 red
1 green
2 blueUm die Zählung bei einer anderen Zahl zu beginnen, übergibt man start:
fruits = ["apple", "banana", "cherry"]
for i, fruit in enumerate(fruits, start=1):
print(i, fruit)Ausgabe:
1 apple
2 banana
3 cherryzip() — gleichzeitig über zwei Sequenzen iterieren
zip() verbindet Elemente aus zwei (oder mehr) iterierbaren Objekten nebeneinander:
names = ["Alice", "Bob", "Charlie"]
scores = [95, 87, 92]
for name, score in zip(names, scores):
print(name, score)Ausgabe:
Alice 95
Bob 87
Charlie 92zip() stoppt, wenn das kürzeste iterierbare Objekt erschöpft ist.
Über Wörterbücher iterieren
Das Iterieren über ein Wörterbuch liefert standardmäßig die Schlüssel:
person = {"name": "Alice", "age": 30, "city": "Paris"}
for key in person:
print(key, ":", person[key])Ausgabe:
name : Alice
age : 30
city : ParisMit .items() erhält man Schlüssel-Wert-Paare zusammen:
for key, value in person.items():
print(key, ":", value)Ausgabe:
name : Alice
age : 30
city : ParisWeitere Muster finden sich im Kapitel Wörterbücher durchlaufen.
Verschachtelte for-Schleifen
Eine for-Schleife kann in einer anderen for-Schleife platziert werden. Die innere Schleife wird für jede einzelne Iteration der äußeren Schleife vollständig durchlaufen.
Ausgabe:
red apple
red banana
red cherry
big apple
big banana
big cherry
tasty apple
tasty banana
tasty cherryAchtung: break innerhalb einer verschachtelten Schleife beendet nur die innere Schleife, nicht beide. Um beide Schleifen auf einmal zu beenden, benötigt man eine Flag-Variable oder muss den Code in eine Funktion auslagern und return verwenden.
Die pass-Anweisung
pass ist ein No-Op-Platzhalter. Verwende ihn, wenn eine for-Schleife syntaktisch erforderlich ist, aber noch kein Inhalt für den Body vorhanden ist:
for i in range(3):
pass # TODO: implement laterOhne pass würde Python einen IndentationError auslösen, da ein leerer Block keine gültige Syntax ist.
For-Schleifen vs. List Comprehensions
Ein häufiges Muster ist das Erstellen einer neuen Liste innerhalb einer for-Schleife:
squares = []
for x in range(1, 6):
squares.append(x ** 2)
print(squares)Ausgabe: [1, 4, 9, 16, 25]
Python bietet eine kompaktere Alternative namens List Comprehension:
squares = [x ** 2 for x in range(1, 6)]
print(squares)Ausgabe: [1, 4, 9, 16, 25]
List Comprehensions sind idiomatisch für einfache Transformationen; verwende eine reguläre for-Schleife, wenn der Body komplex ist oder Nebeneffekte hat.
Wahl zwischen for und while
| Situation | Bevorzuge |
|---|---|
| Du kennst die Anzahl der Iterationen oder hast ein iterierbares Objekt | for |
| Du schleifst, bis sich eine Bedingung ändert | while |
| Du benötigst Index und Wert | for + enumerate() |
| Du iterierst über zwei Listen gleichzeitig | for + zip() |