Python List Comprehension: Syntax, Beispiele und wann man darauf verzichtet

  1. Startseite
  2. Blog
  3. Softwareentwicklung
Softwareentwicklung

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.

7 Min. Lesezeit
Python List Comprehension: Syntax, Beispiele und wann man darauf verzichtet
Das Wichtigste
  • Das Muster lautet [Ausdruck for Element in Iterable if Bedingung].
  • Ein einfaches if am Ende filtert; ein if-else am 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.

AufgabeZeit
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 filtern3,62 ms
Gerade Zahlen mit einer Comprehension filtern3,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)

Arbeiten Sie mit Stack Quora

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.

Lesen Sie weiter

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.

Künstliche Intelligenz

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 →
DevOps

Erklä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 →
Softwareentwicklung

API-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 →
Testautomatisierung

Spott 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 →
Softwaretests

Code-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 & SQL

DELETE 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 & SQL

Erklä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 →
Softwareentwicklung

TypeScript-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 →
Softwareentwicklung

Python *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 →
Softwareentwicklung

Python-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 Intelligenz

Was 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 →
DevOps

Docker-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 →
Testautomatisierung

TDD 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 →
Softwareentwicklung

Git 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 →
Softwareentwicklung

Python 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 & SQL

SQL 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 →