Kodokon kodokon.com

Listen- und Dictionary-Comprehensions

Ersetze deine aufbauenden Schleifen durch ausdrucksstarke Comprehensions, um deine Daten zu transformieren, zu filtern und neu zu indizieren.

8 Min. · 3 Fragen

Diese Lektion in Kodokon öffnen

Eine List-Comprehension verdichtet das häufigste Muster in der Programmierung: eine Liste aufzubauen, indem man eine Sequenz transformiert oder filtert. Die Syntax liest sich wie ein Satz: [expression for element in sequence if condition]. Gleiches Ergebnis wie eine Schleife mit append, in einer einzigen deklarativen Zeile, die jeder Python-Entwickler sofort erkennt.

PYTHON
prices = [12.0, 49.9, 5.5, 199.0]

with_tax = [round(p * 1.2, 2) for p in prices]
cheap = [p for p in prices if p < 50]

print(with_tax)  # [14.4, 59.88, 6.6, 238.8]
print(cheap)     # [12.0, 49.9, 5.5]
Transformiere mit dem Ausdruck, filtere mit dem nachgestellten if.

Die Dictionary-Comprehension folgt derselben Logik mit der Syntax {key: value for ...}. Ein sehr verbreiteter Anwendungsfall in Projekten: eine Liste von Objekten nach ihrem Bezeichner neu zu indizieren, um dann sofortige Zugriffe zu bekommen, statt die Liste jedes Mal zu durchsuchen, wenn man etwas braucht.

PYTHON
users = [
    {"id": 7, "name": "Alice"},
    {"id": 12, "name": "Bruno"},
    {"id": 31, "name": "Chloe"},
]

by_id = {u["id"]: u["name"] for u in users}
print(by_id[12])    # Bruno
print(31 in by_id)  # True
Neuindizierung nach Bezeichner: ein Klassiker professionellen Codes.

Zwei Positionen für if, zwei verschiedene Rollen. Nach dem for platziert, filtert es: Abgelehnte Elemente erscheinen nicht im Ergebnis. Vor dem for platziert, als bedingter Ausdruck (a if condition else b), wählt es einen Wert für jedes Element: Die Liste behält dann dieselbe Länge wie die Quelle.

PYTHON
scores = [45, 82, 67, 91]

labels = ["pass" if s >= 60 else "fail" for s in scores]
print(labels)  # ['fail', 'pass', 'pass', 'pass']
Der bedingte Ausdruck transformiert jedes Element, ohne eines zu entfernen.

Wissenscheck

Stelle sicher, dass du die wichtigsten Punkte dieser Lektion behalten hast.

  1. Welche Rolle spielt das if in [x * 2 for x in data if x > 0]?
    • Es wählt für jedes Element zwischen zwei Werten
    • Es filtert: Nur positive Elemente werden behalten
    • Es stoppt die Comprehension beim ersten negativen Element
  2. Was erzeugt {n: n * n for n in range(3)}?
    • {0: 0, 1: 1, 2: 4}
    • {1: 1, 2: 4, 3: 9}
    • [0, 1, 4]
    • {0, 1, 4}
  3. Wann ist es besser, eine Comprehension durch eine klassische Schleife zu ersetzen?
    • Wenn die Logik komplex oder verschachtelt wird
    • Sobald die Liste hundert Elemente überschreitet
    • Nie, die Comprehension ist immer vorzuziehen