Mit Hilfe von List Comprehension kann man mit wenig Code in Python ganz einfach komplizierte Listen erstellen.
Vorwissen
Um zu verstehen, wofür List Comprehension genutzt wird, wird vorausgesetzt, dass man weiß, was Listen sind und was Schleifen sind. Falls diese Begriffe euch nichts sagen, schaut euch am besten nochmal in den Artikeln für Listen und für For-Schleifen um.
Was ist eine Liste?
Eine Liste ist eine Datenstruktur in Python, in der man mehrere Werte in einer einzigen Variable abspeichern kann. Sie sind praktisch, wenn man beispielsweise mehrere Werte x hat, aber nicht unbedingt darauf Lust hat mehrere Variablen mit den Namen x1, x2, x3… anzulegen.
x = [0, 1, 2, 3]
Was ist eine List Comprehension?
Mit Hilfe von List Comprehensions kann man komplizierte und aufwendige Listen ganz einfach mit wenig Code erstellen.
Nehmen wir an, wir wollen eine Liste mit den ersten 10 Zahlen erstellen, also eine Liste mit den Zahlen 0, 1, 2 … bis 10.
Die erste Möglichkeit, wie wir das machen könnten, wäre alles per Hand einzugeben.
x = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Das Ganze ist aber sehr mühselig, vor allem wenn wir mehr als 10 Zahlen nehmen würden. Die zweite Möglichkeit die oben gezeigte Liste zu erstellen ist mit Hilfe einer For-Schleife.
Das würde dann so aussehen:
liste = []
for zahl in range(0, 11):
liste.append(zahl)
print(liste)
### Output:
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Zunächst müssen wir eine leere Liste erstellen, in der wir die Zahlen abspeichern werden. Danach erstellen wir eine Schleife von 0 bis 20, hierbei ist „zahl“ eine Zählvariable, also eine Variable, die sich immer um 1 erhöht, nachdem alle Befehle, die eingerückt nach der Zeile stehen, ausgeführt wurden.
Da wir die Zahlen von 0 bis 10 haben wollen, benutzen wir range(0, 11), wobei 0 der Anfang und 10 das Ende ist.
Wichtig: Wir müssen hier 11 hinschreiben, weil die 11 in der range()-Funktion nicht mit eingeschlossen wird. Würden wir dort eine 10 hinschreiben, würde unsere Liste dementsprechend bei 9 enden.
Mit x.append(i) fügen den momentanen Wert von i zur Liste hinzu.
Mit einer List Comprehension würde das ganze folgendermaßen aussehen:
liste = [zahl for zahl in range(0,11)]
print(liste)
### Output:
>>> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Sieht eigentlich fast so aus, wie die Schleife obendrüber, oder?
Denn das ist es auch, nur schreiben wir hier alles in eine Zeile und benötigen das x.append(i) nicht. Außerdem müssen wir nicht zuerst eine leere Liste erstellen.
Wie ist eine List Comprehension aufgebaut?
Wir schreiben wie gewohnt bei Listen zunächst mal die Liste mit zwei eckigen Klammern []. In die eckigen Klammern schreiben wir als nächstes das was wir in der Liste haben wollen. Wir wollen immer den derzeitigen Wert von der Variable i abspeichern – deshalb schreiben wir das erste i [x = i …] hin. Danach kommt die Schleife, welche die Werte von i bestimmen. [for i in range(0, 11)].
Die allgemeine Schreibweise sieht dann also so aus:
x = [Wert der in der Liste stehen soll for jedes Element in der Liste]
Bedingungen in List Comprehensions
Eine Besonderheit bei List Comprehension ist, dass man auch noch, wenn-Bedingungen, auch gennant if-Bedingungen, hinzufügen kann. Man kann also auch nur bestimmte Werte auswählen und diese in die Liste hinzufügen.
Wollen wir beispielsweise nur alle geraden Zahlen von 0 bis 10, schreiben wir das wie folgt:
x = [zahl for zahl in range(0, 11) if zahl % 2 == 0]
Wir schreiben nach der for-Schleife einfach noch die if Bedingungen hintendran. Das i % 2 == 0 heißt übersetzt i modulo 2 – genauer gesagt, es wird geschaut, ob der Rest 0 ist, wenn man die Zahl i durch 2 teilt.
Geben wir nun x aussehen, sehen wir, dass die Liste tatsächlich nur alle geraden Zahlen beinhaltet.
...
print(x)
### Output:
>>> [0, 2, 4, 6, 8, 10]