List Comprehensions sind eine kompakte Schreibweise, um aus vorhandenen Daten neue Listen zu erzeugen. Man kann damit Elemente transformieren (z. B. quadrieren, in Grossbuchstaben umwandeln) und optional filtern – in einer einzigen, gut lesbaren Zeile. Die Schreibweise erinnert an mathematische Mengen-Schreibweise.
List Comprehensions werden in Python hauptsächlich für zwei Dinge verwendet:
x → x**2 oder „audi“ → „AUDI“)Typisch ist eine Kombination aus beidem:
„Nimm alle Elemente aus einer bestehenden Datenquelle, filtere sie nach einer Bedingung und wandle sie in eine neue Form um.“
Die allgemeine Form einer List Comprehension ist:
newlist = [expression for item in iterable if condition]
item).True oder False ergibt. Nur wenn sie `True` ist, wird expression in die neue Liste aufgenommen.Ohne Filter-Bedingung sieht die einfachste Form so aus:
newlist = [expression for item in iterable]
Das ist äquivalent zu:
newlist = [] for item in iterable: # optional: if condition: newlist.append(expression)
Die Expression ist der Teil, der tatsächlich in der neuen Liste landet. Sie kann:
# Expression = x * 2 doubled = [x * 2 for x in range(5)] # Ergebnis: [0, 2, 4, 6, 8]
cars = ['audi', 'bmw', 'subaru', 'toyota'] newlist = [car.upper() for car in cars] print(newlist) # ['AUDI', 'BMW', 'SUBARU', 'TOYOTA']
item ist der Name für das aktuelle Element der Iteration. Er wird im for-Teil definiert: for item in iterable.
cars = ['audi', 'bmw', 'subaru', 'toyota'] newlist = [item.upper() for item in cars] print(newlist)
Hier ist item nacheinander 'audi', 'bmw', 'subaru', 'toyota'.
Das Iterable kann ein beliebiges iterierbares Objekt sein, z. B. eine Liste, ein Tupel, ein Set, ein String oder das Ergebnis von range().
squared = [x**2 for x in [1, 2, 3, 4]] # Ergebnis: [1, 4, 9, 16] numbers = [1, 2, 3, 4] squared = [x**2 for x in numbers] # Ergebnis: [1, 4, 9, 16]
doubled = [x * 2 for x in (1, 2, 3, 4)] # Ergebnis: [2, 4, 6, 8]
newlist = [x for x in range(10)] # Ergebnis: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Die Condition ist ein optionaler Filter, der entscheidet, ob ein Element in die neue Liste aufgenommen wird. Nur wenn die Bedingung True ergibt, wird expression übernommen.
cars = ['audi', 'vw', 'seat', 'skoda', 'tesla'] newlist = [car for car in cars if car != 'tesla'] # newlist = ['audi', 'vw', 'seat', 'skoda']
Die Bedingung car != 'tesla' liefert True für alle Elemente ausser 'tesla', daher enthält die neue Liste alle Autos ausser Tesla.
Die Bedingung ist optional und kann weggelassen werden:
newlist = [x for x in cars] # Kopie der ursprünglichen Liste
letters = [letter for letter in 'Hallo Welt'] # Ergebnis: ['H', 'a', 'l', 'l', 'o', ' ', 'W', 'e', 'l', 't']
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] flattened = [num for row in matrix for num in row] # Ergebnis: [1, 2, 3, 4, 5, 6, 7, 8, 9]
List Comprehensions sind ein mächtiges Werkzeug in Python, um vorhandene Daten in einer einzigen, klaren Zeile zu transformieren und (falls nötig) zu filtern. Richtig eingesetzt machen sie Code kürzer und oft besser lesbar.