Python List Comprehension: Syntax, Beispiele und wann man darauf verzichtet
Lernen Sie die Python List Comprehension Schritt für Schritt: Listen in einer Zeile erstellen, filtern und umwandeln, gemessene Zeiten im Vergleich zu Schleifen sehen und wissen, wann eine for-Schleife lesbarer ist.
- Das Muster lautet
[Ausdruck for Element in Iterable if Bedingung]. - Ein einfaches
ifam Ende filtert; einif-elseam Anfang wählt zwischen zwei Werten. - In unserem Test war die Comprehension rund 37 % schneller als eine Schleife mit
append. - Nutzen Sie bei sehr großen Datenmengen einen Generatorausdruck und eine normale Schleife, wenn die Logik mehrere klare Schritte braucht.
Eine Python List Comprehension erzeugt aus jedem Iterable in einer einzigen lesbaren Zeile eine neue Liste. Statt eine leere Liste anzulegen, zu durchlaufen und append aufzurufen, beschreiben Sie das gewünschte Ergebnis.
Dieser Leitfaden führt vom Grundmuster über Filter und verschachtelte Schleifen bis zu Zeiten, die wir selbst gemessen haben. Wenn Python neu für Sie ist, beginnen Sie mit unserem Python-Tutorial für Anfänger (auf Englisch) und halten Sie Ihre Umgebung sauber mit der Anleitung zu virtuellen Umgebungen (auf Englisch).
Syntax der Python List Comprehension
Lesen Sie sie von links nach rechts: Der Ausdruck sagt, wie jedes neue Element aussieht, der for-Teil sagt, woher die Elemente kommen.
squares = [x * x for x in range(6)]
print(squares) # [0, 1, 4, 9, 16, 25]
names = [" Hi ", " QA "]
clean = [n.strip().lower() for n in names]
print(clean) # ['hi', 'qa']
Dasselbe Ergebnis braucht mit einer Schleife drei Zeilen mehr. Diese Ersparnis ist der Sinn der Sache, solange die Zeile gut lesbar bleibt.
Elemente mit einer Bedingung filtern
Fügen Sie nach der Schleife ein if hinzu, um nur die Elemente zu behalten, die die Bedingung erfüllen.
evens = [x for x in range(10) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8]
Python List Comprehension mit if-else
Wenn Sie für jedes Element einen Wert wollen, setzen Sie das if-else vor das for. Hier machen Anfänger die meisten Fehler, denn ein else am Ende ist ein Syntaxfehler.
labels = ["even" if x % 2 == 0 else "odd" for x in range(4)]
print(labels) # ['even', 'odd', 'even', 'odd']
Faustregel: Ein if am Ende entfernt Elemente, ein if-else am Anfang verändert sie. Mit if-else bleibt die Länge der Liste gleich.
Verschachtelte Schleifen und Abflachen
Mehrere for-Klauseln werden in derselben Reihenfolge gelesen wie verschachtelte Schleifen. Damit flachen Sie eine Liste von Listen ab oder bilden Paare.
matrix = [[1, 2, 3], [4, 5, 6]]
flat = [n for row in matrix for n in row]
print(flat) # [1, 2, 3, 4, 5, 6]
pairs = [(x, y) for x in range(1, 3) for y in "ab"]
print(pairs) # [(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
Um die Matrix zu transponieren, verschachteln Sie eine Comprehension in einer anderen: [[r[i] for r in matrix] for i in range(3)] ergibt [[1, 4], [2, 5], [3, 6]]. Zwei Ebenen sind die praktische Grenze, bevor die Lesbarkeit leidet.
Dictionary-, Set- und Generator-Formen
Ändern Sie die Klammern, und dieselbe Idee erzeugt andere Typen.
lengths = {w: len(w) for w in ["pip", "venv", "uv"]} # {'pip': 3, 'venv': 4, 'uv': 2}
unique = {len(w) for w in ["pip", "venv", "uv", "git"]} # {2, 3, 4}
total = sum(x * x for x in range(1_000_000)) # generator, no list
Die Typen selbst vergleichen Sie in unserem Leitfaden zu Listen, Tupeln, Sets und Dictionaries (auf Englisch).
Geschwindigkeit und Speicher: Unsere Messwerte
Wir haben jede Variante unter Python 3.13.6 mit 100.000 Ganzzahlen gemessen und jeweils den besten von fünf Läufen genommen. Ihre Zahlen werden abweichen, die Reihenfolge bleibt aber stabil.
| Aufgabe | Zeit |
|---|---|
Schleife mit append (jedes Element verdoppeln) | 5,18 ms |
| List Comprehension (jedes Element verdoppeln) | 3,25 ms |
list(map(lambda ...)) | 6,50 ms |
| Gerade Zahlen mit einer Schleife filtern | 3,62 ms |
| Gerade Zahlen mit einer Comprehension filtern | 3,43 ms |
Die Comprehension schlägt die append-Schleife deutlich, der Abstand schrumpft aber, wenn die Bedingung den Großteil der Zeit kostet. Beim Speicher belegte eine Liste mit einer Million verdoppelter Ganzzahlen etwa 8,4 MB, das passende Generatorobjekt dagegen nur 200 Byte, weil es die Werte einzeln erzeugt.
Wann man keine List Comprehension verwendet
- Sie brauchen nur Nebenwirkungen wie Ausgeben oder Speichern. Nehmen Sie eine normale Schleife; eine Comprehension würde eine nutzlose Liste bauen.
- Die Logik hat mehrere Schritte. Brauchen Sie eine zweite Variable oder ein
try, schreiben Sie eine Schleife oder eine kleine Funktion. - Die Daten sind riesig. Nutzen Sie einen Generatorausdruck, damit Python nicht die ganze Liste im Speicher hält.
- Sie braucht mehr als zwei
for-Klauseln. Teilen Sie sie für den nächsten Leser in benannte Schritte auf.
Fazit
Verwenden Sie eine Python List Comprehension, wenn eine kurze Zeile genau sagt, was Sie meinen, und eine Schleife, wenn nicht. Beginnen Sie mit dem Grundmuster, fügen Sie einen Filter hinzu und üben Sie die if-else-Form, bis die Reihenfolge selbstverständlich wird.
Häufig gestellte Fragen
Was ist eine List Comprehension in Python?
Eine kompakte Möglichkeit, eine Liste zu erzeugen, indem ein Ausdruck auf jedes Element eines Iterables angewendet wird, optional mit einer Bedingung zum Filtern.
Wie verwende ich if-else in einer List Comprehension?
Setzen Sie den bedingten Ausdruck vor die for-Klausel, zum Beispiel ["even" if x % 2 == 0 else "odd" for x in nums]. Ein einfacher Filter nutzt nur ein if nach der Schleife.
Ist eine List Comprehension schneller als eine for-Schleife?
Meistens ja. In unserem Test mit 100.000 Elementen war sie etwa 37 % schneller als eine Schleife mit append, aber die Lesbarkeit sollte zuerst entscheiden.
Was ist der Unterschied zwischen einer List Comprehension und einem Generatorausdruck?
Die List Comprehension baut die ganze Liste auf einmal im Speicher auf. Der Generatorausdruck nutzt runde Klammern und liefert jeweils einen Wert, was bei großen Daten Speicher spart.
Kann ich List Comprehensions verschachteln?
Ja, zum Abflachen oder Transponieren einer Matrix. Bleiben Sie bei zwei Ebenen und wechseln Sie zu einer Schleife, wenn es schwer lesbar wird.
Weiterlernen (englische Artikel)
Brauchen Sie Hilfe bei Tests, WordPress oder SEO?
Wir helfen Teams, bessere Software auszuliefern und ihre Websites auszubauen. Erzählen Sie uns, woran Sie arbeiten, und wir schlagen einen klaren nächsten Schritt vor.
Weitere Anleitungen finden Sie unter Tests, KI und moderne Entwicklung
Hat Ihnen dieser Artikel gefallen? Wählen Sie ein Thema und springen Sie direkt in unsere neuesten Tutorials.
KI-Halluzinationen erklärt: Warum Sprachmodelle Dinge erfinden und wie man sie reduziert
KI-Halluzinationen erklärt: Was sie sind, warum Sprachmodelle sie produzieren, gängige Typen, wie man sie mit Erdung und Eingabeaufforderungen reduz…
Artikel lesen →DevOpsErklärte Umgebungsvariablen: .env-Dateien, Geheimnisse und Konfiguration richtig gemacht
Umgebungsvariablen anhand von Python-Beispielen erklärt, die wir ausgeführt haben: Sie lesen und festlegen, warum jeder Wert ein String ist, .env-Da…
Artikel lesen →SoftwareentwicklungAPI-Ratenbegrenzung erklärt: Algorithmen, Header und Behandlung von 429-Fehlern
API-Ratenbegrenzung anhand einer von uns durchgeführten Simulation erklärt: Token-Bucket, festes Fenster, gleitendes Fenster, 429 Antworten, Ratenbe…
Artikel lesen →TestautomatisierungSpott in Python: unittest.mock, Patch und die Fehler, die Tests zum Lügen machen
Mocking in Python mit unittest.mock, getestet: Mock und return_value, side_effect, Patchen, wo ein Name verwendet wird, Spezifikation und Autospec, …
Artikel lesen →SoftwaretestsCode-Abdeckung erklärt: Leitungs- und Zweigstellenabdeckung und was 100 % wirklich bedeutet
Erklärung der Codeabdeckung anhand eines echten Coverage.py-Laufs: Zeilen-, Zweig- und Bedingungsabdeckung, Lesen eines Berichts, warum bei 100 % Ab…
Artikel lesen →Datenbanken & SQLDELETE vs. TRUNCATE vs. DROP in SQL: Unterschiede, Rollback und Verwendungszweck
DELETE vs. TRUNCATE vs. DROP erklärt mit getestetem SQL: was jeweils entfernt wird, Rollback, Trigger, Identitätsrücksetzung, Geschwindigkeit und wi…
Artikel lesen →Datenbanken & SQLErklärte SQL-Ansichten: Erstellen, nutzen und vermeiden Sie Fallstricke mit Beispielen
SQL-Ansichten anhand der von uns ausgeführten Abfragen erklärt: Erstellen einer Ansicht, Live-Ergebnisse, Ausblenden von Spalten, Leistung, aktualis…
Artikel lesen →SoftwareentwicklungTypeScript-Schnittstelle vs. Typ: Echte Unterschiede, getestet mit dem Compiler
TypeScript-Schnittstelle vs. Typ, überprüft mit dem echten Compiler: Was beide können, was nur einer kann, Deklarationszusammenführung, Erweiterunge…
Artikel lesen →SoftwareentwicklungPython *args und **kwargs erklärt: Flexible Funktionen mit klaren Beispielen
Python *args und **kwargs erklärt mit Code, den wir ausgeführt haben: Packen und Entpacken, Parameterreihenfolge, Nur-Schlüsselwort- und Nur-Positio…
Artikel lesen →SoftwareentwicklungPython-Lambda-Funktionen: Syntax, tatsächliche Verwendung und wann man sie nicht verwendet
Python-Lambda-Funktionen erklärt mit Code, den wir ausgeführt haben: Syntax, Sortierung mit Schlüssel, Karte und Filter, Abschlüsse, die Late-Bindin…
Artikel lesen →Künstliche IntelligenzWas sind KI-Agenten? Wie sie funktionieren, mit einer einfachen Agentenschleife, die Sie ausführen können
Was sind KI-Agenten? Eine einfache Anleitung zur Agentenschleife, zu Tools, Speicher und Leitplanken, mit einer kleinen Python-Schleife, die wir aus…
Artikel lesen →DevOpsÜberwachung vs. Beobachtbarkeit: Der wahre Unterschied, mit Protokollen, Metriken und Traces
Überwachung vs. Beobachtbarkeit erklärt: bekannte und unbekannte Fehler, Protokolle, Metriken und Spuren, eine exemplarische Vorgehensweise für Chec…
Artikel lesen →DevOpsDocker-Volumes vs. Bind Mounts: Containerdaten auf die richtige Art und Weise beibehalten
Docker-Volumes vs. Bind-Mounts erklärt: Warum Containerdaten verschwinden, benannte Volumes, Bind-Mounts, tmpfs, Compose-Beispiele, Backups, Berecht…
Artikel lesen →TestautomatisierungTDD vs. BDD: Hauptunterschiede, eine Funktion, die auf beide Arten entwickelt wurde und wann sie jeweils verwendet werden sollte
TDD vs. BDD erklärt mit einer Rabattfunktion, die in beide Richtungen aufgebaut ist: Rot-Grün-Refaktor mit Code, den wir ausgeführt haben, Gegeben-W…
Artikel lesen →SoftwareentwicklungGit merge vs rebase: Unterschiede, Beispiele und wann man was nutzt
Git merge vs rebase erklärt mit echter Log-Ausgabe, einer Vergleichstabelle, der goldenen Regel des Rebase und einem sicheren Team-Workflow.
Artikel lesen →SoftwareentwicklungPython List Comprehension: Syntax, Beispiele und wann man darauf verzichtet
Python List Comprehension erklärt: Syntax, Filter, if-else, verschachtelte Schleifen, gemessene Zeiten und Fälle, in denen eine normale for-Schleife…
Artikel lesen →Datenbanken & SQLSQL Joins erklärt mit Beispielen (Inner, Left, Right, Full)
SQL Joins Schritt für Schritt mit Beispieltabellen und Abfragen verstehen: INNER, LEFT, RIGHT, FULL, CROSS und SELF, plus typische Fehler und Perfor…
Artikel lesen →