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

In [1]:
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)
Gerade: [0, 2, 4, 6, 8]
Ungerade: [1, 3, 5, 7, 9]

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

In [2]:
zahlen = list(range(10))
gerade = zahlen[::2]
ungerade = zahlen[1::2]
print(gerade)
print(ungerade)
[0, 2, 4, 6, 8]
[1, 3, 5, 7, 9]

Slicing funktioniert auch mit anderen Objekten, deren Elemente man über einen Index erreicht:

In [3]:
print("Hallo Welt"[::2])
print("Hallo Welt"[-4:])
print((1, 2, 3, 4)[:3])
HloWl
Welt
(1, 2, 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.

In [4]:
buchstaben = ["a", "b", "c", "d", "e"]
großbuchstaben = [b.upper() for b in buchstaben]
print(großbuchstaben)
['A', 'B', 'C', 'D', 'E']

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.

In [5]:
string_liste = ["a", "b", "Hallo", "x", "Welt", "zb"]
neue_liste = [x for x in string_liste if len(x) > 3]
print(neue_liste)
['Hallo', 'Welt']

Beispiel 3:

Wir haben eine Funktion, die wir auf jedes Element in der Liste anwenden möchten

In [6]:
def quadrat(x):
    return x * x

zahlen = range(10)
quadrat_zahlen = [quadrat(i) for i in zahlen]
print(quadrat_zahlen)
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Beispiel 4:

Wir haben eine Liste und möchten nur die Elemente, bei denen unsere Funktion True ergibt

In [7]:
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)
['a', 'Hallo']