Zum Inhalt springen
BetaEN
Lektion 21 von 35Python

Python · Lektion 21 · 25 Minuten

List Comprehensions

Das lernst du

  • Listen in einer einzigen Zeile erzeugen
  • Mit if in einer Comprehension filtern
  • Dictionary-Comprehensions schreiben

Eine Liste in einer Zeile

Du kennst schon diesen Weg, eine Liste zu füllen:

quadrate = []
for x in range(1, 6):
    quadrate.append(x * x)
print(quadrate)

Eine List Comprehension macht dasselbe in einer Zeile:

quadrate = [x * x for x in range(1, 6)]
print(quadrate)

Lies sie so: „Nimm x mal x für jedes x in range(1, 6).“

Filtern mit if

Hinten kannst du eine Bedingung anhängen. Nur Elemente, für die sie wahr ist, kommen in die neue Liste:

noten = [1, 4, 2, 5, 3, 2, 6]
gute = [n for n in noten if n <= 2]
print(gute)

namen = ["mia", "ben", "lea"]
print([n.upper() for n in namen if n != "ben"])

Dictionaries und Mengen

Mit geschweiften Klammern funktioniert es auch für Dictionaries:

preise = {"Apfel": 0.5, "Brot": 2.0, "Käse": 3.5}
mit_rabatt = {ware: round(preis * 0.9, 2) for ware, preis in preise.items()}
print(mit_rabatt)

buchstaben = {b for b in "programmieren"}
print(sorted(buchstaben))

Merke: Comprehensions sind super für kurze Umwandlungen. Wird sie so lang, dass man sie kaum noch lesen kann, ist eine normale for-Schleife besser.

Kurz-Check

Bevor es an die Aufgabe geht: Was gibt dieses Programm aus? Tipp deine Vermutung ein – Python rechnet danach nach.

woerter = ["a", "bc", "def"]
print([w.upper() for w in woerter if len(w) > 1])

Deine Aufgabe

Jetzt bist du dran

Erzeuge mit je einer Comprehension: die Liste quadrate mit den Quadratzahlen von 1 bis 10, die Liste gerade mit allen geraden Zahlen aus zahlen und das Dictionary laengen, das jedem Wort aus woerter seine Länge zuordnet.

zahlen = [3, 8, 15, 22, 7, 40]
woerter = ["Robo", "Python", "Code"]

quadrate = []
gerade = []
laengen = {}

print(quadrate)
print(gerade)
print(laengen)

Ohne Hinweise gelöst gibt es einen ⭐ auf deiner Fortschrittsseite.

Lösung anzeigen

Versuch es erst selbst – aus Fehlern lernt man am meisten. Hier ist eine mögliche Lösung:

zahlen = [3, 8, 15, 22, 7, 40]
woerter = ["Robo", "Python", "Code"]

quadrate = [x ** 2 for x in range(1, 11)]
gerade = [z for z in zahlen if z % 2 == 0]
laengen = {w: len(w) for w in woerter}

print(quadrate)
print(gerade)
print(laengen)
Mehr üben im TrainingsraumEndlos neue Aufgaben zu diesem Thema – mit XP und Serien.