Menu

Python-List-Comprehension: Syntax, Filtern und Dict-Comprehensions

Mit List Comprehensions baust du eine neue Liste in einer lesbaren Zeile — mappen, filtern oder beides — und ersetzt das Loop-und-append-Muster.

Eine Zeile, eine Idee

Das Muster hast du schon mehrfach geschrieben: mit einer leeren Liste beginnen, über etwas iterieren, eventuell filtern und an das Ergebnis anhängen.

main.py
Output
Click Run to see the output here.

Eine List Comprehension sagt dasselbe in einer Zeile:

main.py
Output
Click Run to see the output here.

Lies es von links nach rechts: „eine neue Liste bestehend aus n * 2 für jedes n in numbers“. Die Struktur ist [expression for item in iterable].

Das ist kein Python-spezifischer Trick — es heißt Comprehension, weil du beschreibst, was in die neue Liste geht, deklarativ, statt die Mechanik ihres Aufbaus auszuschreiben.

Einen Filter hinzufügen

Häng nach dem Schleifen-Teil eine if-Klausel an, um zu filtern:

main.py
Output
Click Run to see the output here.

Lies das zweite: „n * n für jedes n in numbers, aber nur, wenn n ungerade ist“.

Die äquivalente Schleife:

main.py
Output
Click Run to see the output here.

Beides ist okay. Die Comprehension ist kürzer und, sobald du ein paar davon gelesen hast, tatsächlich leichter zu überfliegen, weil die Absicht in einer Zeile steht.

Mappen und Filtern kombiniert

Du kannst Werte durch eine Funktion schicken und gleichzeitig filtern:

main.py
Output
Click Run to see the output here.

Für jedes Wort, das länger als 3 Buchstaben ist, nimm die Großbuchstabenversion.

Verschachtelte Schleifen in einer Comprehension

Zwei for erzeugen ein kartesisches Produkt:

main.py
Output
Click Run to see the output here.

Die Reihenfolge entspricht genau der verschachtelten Schleife: das erste for ist die äußere, das zweite die innere. Sie liest sich von links nach rechts wie die entsprechende eingerückte Schleife.

Zwei Ebenen sind etwa das Limit, bevor eine reguläre Schleife besser liest. Bei drei: zurück zu Schleifen.

Dict- und Set-Comprehensions

Gleiche Idee, andere Klammern:

main.py
Output
Click Run to see the output here.

Set-Comprehensions sehen auf den ersten Blick aus wie Dict-Comprehensions — der Unterschied ist das key: value gegenüber einem einzelnen Ausdruck. Klammern plus : = Dict; Klammern ohne : = Set.

Generator-Ausdrücke

Ein naher Zwilling der List Comprehension, aber mit runden statt eckigen Klammern — und entscheidend: er baut keine Liste:

main.py
Output
Click Run to see the output here.

Beachte, dass wir den Generator direkt an sum() und any() übergeben haben — ohne zusätzliche Klammern. Generator-Ausdrücke sind das richtige Werkzeug, wenn der Empfänger nur einmal iterieren muss. Sie sind bei großen Sammlungen speicherschonender als eine volle Liste.

Wann du stattdessen eine reguläre Schleife nutzt

Comprehensions sind verführerisch. Technisch kannst du viel in eine quetschen. Du solltest es nicht.

Greif zur normalen Schleife, wenn:

  • Die Transformation aus mehr als einem Schritt besteht. Brauchst du Zwischenvariablen, schreib es aus.
  • Es komplexe Fehlerbehandlung oder Verzweigungen gibt.
  • Jede Leserin mehr als einmal innehalten muss, um die Zeile zu verstehen.

Die Regel, die ich anwende: wenn ich die Comprehension in einem Atemzug lesen und verstehen kann, bleibt sie. Stolpere ich, wird sie zur Schleife.

Manche Comprehensions wirken clever, tun aber weh:

main.py
Output
Click Run to see the output here.

Gleiches Ergebnis. Die Schleifen-Version ist fünf Zeilen statt einer, aber „länger“ ist nicht gleich „schlechter“.

Ein paar Muster, die du wiederverwenden wirst

main.py
Output
Click Run to see the output here.

Diese fünf Muster decken überraschend viel tägliche Datenarbeit ab.

Weiter

Du hast jetzt die wichtigsten Sammlungstypen und die Comprehension, die sie zusammenbindet, gesehen. Nächstes Kapitel: Funktionen — Verhalten in benannte, wiederverwendbare Einheiten zu verpacken.

Häufig gestellte Fragen

Was ist eine List Comprehension in Python?

Eine kompakte Syntax, um aus einer bestehenden Iterable eine neue Liste zu bauen. [x * 2 for x in numbers] erzeugt eine neue Liste mit jeder Zahl verdoppelt. Du kannst auch filtern: [x for x in numbers if x > 0].

Wann sollte ich keine List Comprehension verwenden?

Wenn sie die Lesbarkeit beschädigt. Ist der Ausdruck komplex oder tief verschachtelt, ist eine reguläre for-Schleife mit sauberen Variablennamen klarer. Comprehensions sind für einfache Transformationen — Mappen und Filtern. Alles Komplexere gehört in eine vollständige Schleife.

Was ist der Unterschied zwischen einer List Comprehension und einem Generator-Ausdruck?

Eine List Comprehension baut die ganze Liste im Speicher. Ein Generator-Ausdruck (gleiche Syntax, aber mit runden Klammern) liefert Element für Element. Nimm einen Generator, wenn der Empfänger nur einmal iteriert — etwa sum(...) —, damit du keine Liste materialisierst, die du sofort wegwirfst.

Lerne mit Coddy zu programmieren

LOS GEHT'S