Eine verschachtelte Schleife ist eine Schleife, die sich innerhalb einer anderen Schleife befindet. Die innere Schleife wird für jeden einzelnen Durchlauf der äußeren Schleife vollständig ausgeführt. Das klingt kompliziert, ist aber ein sehr nützliches Muster, wenn du mit zweidimensionalen Daten arbeitest.
Grundstruktur
for aussen in range(3):
for innen in range(4):
print(f"Außen: {aussen}, Innen: {innen}")
Für jeden der 3 Durchläufe der äußeren Schleife läuft die innere Schleife 4 Mal. Das ergibt insgesamt 3 × 4 = 12 Ausgaben.
Multiplikationstabelle
Ein klassisches Beispiel ist das Erstellen einer Multiplikationstabelle:
for zeile in range(1, 6):
for spalte in range(1, 6):
ergebnis = zeile * spalte
print(f"{ergebnis:4}", end="") # 4 Zeichen Breite, kein Zeilenumbruch
print() # Zeile abschließen
Ausgabe:
1 2 3 4 5
2 4 6 8 10
3 6 9 12 15
4 8 12 16 20
5 10 15 20 25
print(f"{wert:4}", end="") gibt den Wert in einem Feld von 4 Zeichen Breite aus und fügt keinen Zeilenumbruch am Ende hinzu. Das end="" überschreibt den Standard-Zeilenumbruch.
Muster mit Sternen
Verschachtelte Schleifen eignen sich auch hervorragend zum Zeichnen von Mustern:
# Dreieck aus Sternen
for zeile in range(1, 6):
for stern in range(zeile):
print("*", end="")
print() # neue Zeile
Ausgabe:
*
**
***
****
*****
Zweidimensionale Listen
Verschachtelte Schleifen werden häufig verwendet, um Tabellen (Listen von Listen) zu verarbeiten:
noten = [
[1, 2, 3], # Schüler 1
[2, 1, 2], # Schüler 2
[3, 2, 1], # Schüler 3
]
for schueler_index, schueler_noten in enumerate(noten):
gesamt = 0
for note in schueler_noten:
gesamt += note
durchschnitt = gesamt / len(schueler_noten)
print(f"Schüler {schueler_index + 1}: Durchschnitt {durchschnitt:.1f}")
Wähle aussagekräftige Namen für die Schleifenvariablen beider Ebenen. zeile und spalte, oder schueler und note machen den Code viel verständlicher als i und j.
Leistungsbedenken
Jede Ebene der Verschachtelung multipliziert die Anzahl der Operationen. Für n Elemente gilt:
| Schachtelungstiefe | Operationen |
|---|---|
| 1 Schleife | n |
| 2 Schleifen | n × n = n² |
| 3 Schleifen | n × n × n = n³ |
Drei oder mehr verschachtelte Schleifen können bei großen Datenmengen sehr langsam werden. Wenn du dich dabei ertappst, viele Schleifen zu verschachteln, überlege, ob es einen eleganteren Ansatz gibt.
Übungsaufgaben
Wie viele Mal wird print() insgesamt aufgerufen in: for i in range(4): for j in range(3): print(i, j)
Antwort anzeigen
Was gibt dieser Code aus? for i in range(3): for j in range(i+1): print('*', end='') / print()