EMZETT.
Login

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

Kapitel 16 von 44 im Kurs Python. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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]
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)

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:

333833500

Tipp

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]
  • if am Ende filtert; wert1 if bed else wert2 vor dem for wä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)

Weiter im Kurs

Zurück: Listen-Methoden und Sortieren

Weiter: Tupel

Alle Kapitel: Python im Überblick