Comprehensions und Generatoren
Comprehensions und Generatoren
Comprehensions und Generatoren sind typische Python-Werkzeuge, um Daten kompakt und lesbar zu erzeugen oder zu verarbeiten.
Comprehensions
Eine Comprehension beschreibt eine Datenstruktur deklarativ.
Beispiel aus der Mengenlogik:
T = {x | 1 <= x <= 5 und x in S}
In Python:
s = {2, 3, 5, 7, 9, 11}
t = {x for x in range(1, 6) if x in s}
Ergebnis:
{2, 3, 5}
List-Comprehension
quadrate = [x * x for x in range(1, 6)]
Mit Bedingung:
gerade_quadrate = [x * x for x in range(1, 10) if x % 2 == 0]
Set-Comprehension
zeichen = {c.lower() for c in "Hello World" if c.isalpha()}
Sets entfernen automatisch Duplikate.
Dict-Comprehension
u = [2, 3, 4, 6]
v = {k: list(range(k)) for k in u}
Ergebnis:
{
2: [0, 1],
3: [0, 1, 2],
4: [0, 1, 2, 3],
6: [0, 1, 2, 3, 4, 5]
}
Verschachtelte Comprehensions
t = {2, 3, 5}
u = [b * a for a in range(1, 3) for b in t if b < 5]
Verschachtelte Comprehensions können elegant sein, aber auch schnell unlesbar werden.
Faustregel: Wenn man lange überlegen muss, lieber eine normale Schleife verwenden.
Generatoren
Generatoren erzeugen Werte bei Bedarf.
def lazygen(string):
for char in string:
yield f"lazy ... {char}"
Verwendung:
for s in lazygen("abc"):
print(s)
yield verwandelt die Funktion in einen Generator.
yield vs. return
return beendet eine Funktion sofort.
def non_lazy(string):
for char in string:
return f"lazy ... {char}"
Diese Funktion gibt beim ersten Zeichen zurück und ist danach fertig.
yield gibt einen Wert zurück und merkt sich den Zustand für den nächsten Durchlauf.
Generator-Comprehension
gen = (x * x for x in range(10))
Generator-Comprehensions verwenden runde Klammern.
Bei einem einzelnen Funktionsargument können die Klammern manchmal entfallen:
sum(x * x for x in range(10))
Lazy Evaluation
Generatoren sind lazy. Sie berechnen Werte erst, wenn sie gebraucht werden.
Vorteile:
- weniger Speicherverbrauch
- gut für große Datenmengen
- gut für Streams und Dateien
- Verarbeitung kann früh abbrechen
Nachteil:
- Werte sind nicht sofort alle vorhanden
- ein Generator ist nach Verbrauch leer
- Debugging kann ungewohnter sein
Merksatz
Comprehensions bauen Datenstrukturen kompakt. Generatoren liefern Werte nach Bedarf.
Zuletzt aktualisiert: 6. Juni 2026