Eine List Comprehension baut eine Liste in einer einzigen Zeile. Sie ersetzt viele for-Schleifen mit append und gilt als typisch "pythonisch".
Die Grundform lautet [ausdruck for element in sammlung]:
quadrate = [x * x for x in range(1, 6)]
print(quadrate)
# Dasselbe mit einer Schleife:
quadrate2 = []
for x in range(1, 6):
quadrate2.append(x * x)
print(quadrate2 == quadrate)[1, 4, 9, 16, 25] True
Mit Bedingung (Filter)
Ein if am Ende behält nur passende Elemente:
zahlen = range(1, 11)
gerade = [z for z in zahlen if z % 2 == 0]
print(gerade)
woerter = ["Apfel", "Ei", "Banane", "Os"]
lang = [w for w in woerter if len(w) > 2]
print(lang)[2, 4, 6, 8, 10] ['Apfel', 'Banane']
Mit Umwandlung und Bedingung
Steht das if ... else vor dem for, entscheidet es über den Wert statt über das Behalten:
zahlen = [3, -1, 4, -5, 9]
print([z if z > 0 else 0 for z in zahlen])
print([w.upper() for w in ["a", "b", "c"]])
print([len(w) for w in ["Python", "ist", "toll"]])[3, 0, 4, 0, 9] ['A', 'B', 'C'] [6, 3, 4]
Zwei Schleifen
paare = [(x, y) for x in [1, 2] for y in ["a", "b"]]
print(paare)
matrix = [[1, 2], [3, 4], [5, 6]]
flach = [wert for zeile in matrix for wert in zeile]
print(flach)[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')] [1, 2, 3, 4, 5, 6]
Dictionary- und Mengen-Comprehensions
Mit geschweiften Klammern entstehen Dictionaries und Mengen:
quadrat_von = {x: x * x for x in range(1, 5)}
print(quadrat_von)
laengen = {len(w) for w in ["Auto", "Haus", "Baum", "Tür"]}
print(laengen)
vertauscht = {v: k for k, v in {"a": 1, "b": 2}.items()}
print(vertauscht){1: 1, 2: 4, 3: 9, 4: 16}
{3, 4}
{1: 'a', 2: 'b'}Generator-Ausdrücke
Mit runden Klammern entsteht kein fertiges Ergebnis, sondern ein Generator, der Werte erst bei Bedarf liefert. Das spart Speicher bei großen Datenmengen:
summe = sum(x * x for x in range(1, 1001))
print(summe)333833500
Merke
[ausdruck for x in sammlung if bedingung]ifam Ende filtert;wert1 if bed else wert2vor demforwählt Werte- Auch Dictionaries
{k: v for ...}und Mengen{x for ...}gibt es - Runde Klammern ergeben einen speichersparenden Generator
- Bei zu viel Logik lieber eine Schleife schreiben
Aufgabe
Erzeuge mit einer Comprehension eine Liste der Wörter aus ["Hund", "Katze", "Maus", "Elefant"], die länger als vier Buchstaben sind, in Großbuchstaben.