Kurz: Eine List Comprehension baut eine Liste in einer einzigen Zeile. Sie ersetzt viele for-Schleifen mit append und gilt als typisch “pythonisch”.
Teil des Kurses Python
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)Ausgabe:
[1, 4, 9, 16, 25]
TrueMit 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)Ausgabe:
[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"]])Ausgabe:
[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)Ausgabe:
[(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)Ausgabe:
{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)Ausgabe:
333833500Tipp
Wenn eine Comprehension unübersichtlich wird (mehrere Bedingungen, verschachtelt), nimm lieber eine normale Schleife. Lesbarkeit geht vor Kürze.
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
Übungsaufgabe
Erzeuge mit einer Comprehension eine Liste der Wörter aus ["Hund", "Katze", "Maus", "Elefant"], die länger als vier Buchstaben sind, in Großbuchstaben.
Quiz zur Selbstkontrolle
]?
- [2, 4, 6] (richtig)
- [1, 2, 3, 1, 2, 3]
- [3, 6]
- (2, 4, 6)
Welche Klammern erzeugen einen Generator-Ausdruck?
- Runde Klammern () (richtig)
- Eckige Klammern []
- Geschweifte Klammern {}
- Spitze Klammern <>
Wofür steht das if am Ende einer Comprehension?
- Es filtert, welche Elemente übernommen werden (richtig)
- Es verändert die Werte
- Es beendet die Schleife
- Es ist ein Fehler
Weiter im Kurs
Zurück: Listen-Methoden und Sortieren
Weiter: Tupel
Alle Kapitel: Python im Überblick