Direkt zum Hauptinhalt springen
eLearner.app
Modul 6 · Lektion 1 von 421/36 im Kurs~12 min
Lektionen des Moduls (1/4)

List Comprehension

A List Comprehension ist ein Ausdruck, der eine Liste aufbaut, indem er eine Transformation (und optional einen Filter) auf ein Iterable anwendet. Es ist der pythonische Weg, for + append auf einer einzigen Zeile zu schreiben.

Python
# imperativer Stil (weitschweifig)
quadrati = []
for n in range(5):
    quadrati.append(n * n)

# pythonischer Stil
quadrati = [n * n for n in range(5)]
# [0, 1, 4, 9, 16]

Vollständige Syntax

Python
[espressione for elemento in iterabile if condizione]
  • expression: was in die resultierende Liste eingefügt werden soll
  • for element in iterable: Quellschleife
  • if condition (optional): behält nur die Elemente, auf die das zutrifft
Python
pari = [n for n in range(10) if n % 2 == 0]
# [0, 2, 4, 6, 8]

maiuscole = [p.upper() for p in ["ciao", "mondo"]]
# ['CIAO', 'MONDO']

lunghe = [p for p in ["a", "bb", "ccc", "dddd"] if len(p) >= 3]
# ['ccc', 'dddd']

if/else innerhalb des Ausdrucks (ternär)

Um bedingt zu transformieren (statt zu filtern), verwende den ternären Ausdruck VOR dem for:

Python
[n if n > 0 else 0 for n in [-2, -1, 0, 1, 2]]
# [0, 0, 0, 1, 2]

Multi-for: kartesisches Produkt

Du kannst mehrere for-Klauseln verschachteln:

Python
coppie = [(x, y) for x in range(3) for y in range(2)]
# [(0,0), (0,1), (1,0), (1,1), (2,0), (2,1)]

Die Reihenfolge der for-Klauseln ist "außen vor innen", als wären es verschachtelte Schleifen.

Wann man List Comprehensions NICHT verwenden sollte

  • Komplexe Logik mit vielen verschachtelten if/else-Zweigen → verwende eine explizite Schleife.
  • Nebenwirkungen (print, Dateizugriffe) → Schleife, keine Comprehension.
  • Mehr als 2 verschachtelte Ebenen → eine explizite benannte Schleife ist fast immer besser.

Verschachtelte List Comprehensions

Du kannst mehrere for-Schleifen in einer einzigen List Comprehension verketten. Um beispielsweise eine Matrix (eine Liste von Listen) in eine flache Liste umzuwandeln, kannst du schreiben:

Python
matrix = [[1, 2], [3, 4]]
flat = [item for row in matrix for item in row]
# result: [1, 2, 3, 4]

Die Reihenfolge der Schleifen entspricht genau der Schachtelungsreihenfolge herkömmlicher for-Schleifen.

Probiere es aus

Übung#python.m6.l1.e1
Versuche: 0Wird geladen…

Gegeben sei `nums = [1, 2, 3, 4, 5, 6]`. Erstelle `even_squares` mit den Quadraten der geraden Zahlen. Evaluiere `even_squares`.

Editor wird geladen…
Hinweis anzeigen

if n % 2 == 0 ganz am Ende.

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#python.m6.l1.e2
Versuche: 0Wird geladen…

Gegeben sei `words = ['Ciao', 'Mondo', 'Python', 'Java']`. Erstelle `lengths` mit den Längen JEDES Wortes und `short_words` mit den Wörtern, die kürzer als 5 Zeichen sind. Evaluiere `(lengths, short_words)`.

Editor wird geladen…
Hinweis anzeigen

Zwei separate Comprehensions.

Lösung nach 3 Versuchen verfügbar

Zusätzliche Herausforderung

Übung#python.m6.l1.e3
Versuche: 0Wird geladen…

Verwende eine List Comprehension, um die Quadrate der geraden Ganzzahlen zwischen 1 und einschließlich 10 zu berechnen. Speichere die Liste in `even_squares` und evaluiere sie.

Editor wird geladen…
Hinweis anzeigen

Verwende range(1, 11) zum Iterieren, if x % 2 == 0 zum Filtern und x**2 als Ausdruck.

Lösung nach 3 Versuchen verfügbar