Listenoperationen
Listen verarbeiten¶
Wenn man größere Datenmengen verarbeiten möchte, ist es oft hilfreich, diese in Listenform zu speichern und Operationen auf der gesamten Liste durchzuführen. Hier sollen ein paar Beispiele gezeigt werden, wie man das machen kann.
Teillisten erstellen mit Slicing¶
Wenn man nur einen Teil der Liste (die ersten n Elemente, die letzten n Elemente, jedes nte Element) bearbeiten möchte hilft sogenanntes Slicing. Dabei gibt man in eckigen Klammern hinter der Liste, das Startelement, das Endelement und den Schritt an.
Beispiel: alle geraden / ungeraden Zahlen¶
zahlen = list(range(10))
gerade = zahlen[0:len(zahlen):2] # start: 0, ende: len(zahlen), schritt: 2
ungerade = zahlen[1:len(zahlen):2] # start: 1, ende: len(zahlen), schritt: 2
print("Gerade:", gerade)
print("Ungerade:", ungerade)
Die Defaultwerte für start, ende und schritt sind 0, Länge der Liste und 1. Daher kann man obiges Beispiel noch etwas kürzer schreiben
zahlen = list(range(10))
gerade = zahlen[::2]
ungerade = zahlen[1::2]
print(gerade)
print(ungerade)
Slicing funktioniert auch mit anderen Objekten, deren Elemente man über einen Index erreicht:
print("Hallo Welt"[::2])
print("Hallo Welt"[-4:])
print((1, 2, 3, 4)[:3])
List Comprehensions¶
List Comprehensions sind eine weitere Möglichkeit, aus einer Liste Teillisten zu erstellen. Dabei sind die Möglichkeiten nochmals deutlich größer als beim Slicen.
Die Schreibweise dafür ist in etwa:
[<Ausdruck> for element in liste if <Ausdruck>]
Ausdruck steht für irgendeine Python-Operation. Das if ist optional.
Beispiel 1:¶
Eine Liste enthält Strings. Jeder String soll nun mit Großbuchstaben geschrieben werden.
buchstaben = ["a", "b", "c", "d", "e"]
großbuchstaben = [b.upper() for b in buchstaben]
print(großbuchstaben)
Beispiel 2:¶
Eine Liste enthält Strings mit verschiedenen Längen. Eine neue Liste soll erstellt werden, in der nur Strings mit Zeichenlänge größer 3 enthalten sind.
string_liste = ["a", "b", "Hallo", "x", "Welt", "zb"]
neue_liste = [x for x in string_liste if len(x) > 3]
print(neue_liste)
Beispiel 3:¶
Wir haben eine Funktion, die wir auf jedes Element in der Liste anwenden möchten
def quadrat(x):
return x * x
zahlen = range(10)
quadrat_zahlen = [quadrat(i) for i in zahlen]
print(quadrat_zahlen)
Beispiel 4:¶
Wir haben eine Liste und möchten nur die Elemente, bei denen unsere Funktion True ergibt
def ist_ein_string(x):
"""Die Funktion gibt True zurück
wenn x den Typ str hat"""
return type(x) == str
gemischte_liste = [1.4, 23, "a", ["a", "b", "c"], "Hallo", 4]
nur_strings = [elem for elem in gemischte_liste if ist_ein_string(elem)]
print(nur_strings)