Mit Listen arbeiten

Im letzten Tutorial haben wir die Basis-Datentypen in Python kennengelernt. Nochmal zur Wiederholung, wir haben:

  • float: Gleitkommazahl
  • int: Ganzzahl.
  • str: Text
  • bool: Wahrheitswert

Wir haben auch gesehen, dass wir Werte dieser Datentypen in einer Variable abspeichern können. Jedoch brauchen wir in Python auch die Möglichkeit mehrere Werte einer Variable zuzuweisen. Stelle dir vor wir möchten mehrere Größen speichern. Das würde dann mit einzelnen Variablen wie folgt aussehen:

size1 = 5
size2 = 6
size3 = 9
size4 = 7

Das ist sehr umständlich. Stattdessen können wir die Werte einfach alle zusammen in einer Python-Liste speichern. Die Liste wird dabei in eckigen Klammern geschrieben:

[5, 6, 9, 7]

Und natürlich lässt sich die Liste als Variable speichern:

sizes = [5, 6, 9, 7]

Damit können wir eine Sammlung an Werte benennen und die Liste kann jeden möglichen Datentyp enthalten. Z.B. kann jeder dieser Größen einer Person zugewiesen werden:

sizes = ["person1", 5, "person2", 6, "person3", 9, "person4", 7]

Es können sogar weitere Listen innerhalb der Liste definiert werden. Die soeben gezeigte Liste könnte auch wie folgt strukturiert werden:

sizes = [
  ["person1", 5],
  ["person2", 6],
  ["person3", 9],
  ["person4", 7]
]

Eine Type-Abfrage würde bei Listen entsprechend auch “list” zurückliefern:

type(sizes) # Gibt "list" zurück

Auf Informationen in einer Liste zugreifen

Nachdem wir Listen erstellt haben, müssen wir nun auch wissen wie wir später auf diese Informationen zugreifen können. In Python wird das über den Index des Elements gemacht. Schauen wir nochmal diese Liste an:

sizes = ["person1", 5, "person2", 6, "person3", 9, "person4", 7]

Der Zugriff auf die einzelnen Elemente für über den Index laufen:

  • Index 0: person1
  • Index 1: 5
  • Index 2: person2
  • usw.

Um also die “5” zu bekommen müssen wir darauf wie folgt zugreifen:

sizes[1]

Ein negativer Index würde auch funktioniert, um z.B. das letzte Element zu bekommen:

sizes[-1]

Man kann aber nicht nur über den Index auf die Informationen zugreifen. Es gibt auch das Konzept des Slicings. Damit kann man Bereiche einer Liste wählen. Hier ein Beispiel:

sizes[3:5]

Damit werden die Element vom Index 3 und 4 zurückgegeben. Sprich: Der erste definierte Index in den eckigen Klammern wird eingeschlossen, der zweite nicht mehr. Man kann jedoch auch den ersten Index auslassen:

sizes[:3]

Damit sagt man Python, dass mit 0 begonnen werden soll. Hier wird also dann Index 0, 1 und 2 eingeschlossen. Das funktioniert auch andersrum:

sizes[3:]

Damit wird mit Index 3 begonnen und bis zum Ende alle weiteren Elemente gewählt.

Listen manipulieren

Schauen wir uns nun an, wie wir Werte innerhalb einer schon definierten Liste ändern können. Nehmen wir als Beispiel wieder folgende Liste:

sizes = ["person1", 5, "person2", 6, "person3", 9, "person4", 2]

Wenn wir nun den Wert von “person4” ändern bzw. überschreiben möchten, können wir das wie folgt tun:

sizes[7] = 4

Das Ergebnis wäre dann:

["person1", 5, "person2", 6, "person3", 9, "person4", 4]

Wir können aber auch mehrere Werte gleichzeitig anpassen wie hier:

sizes[0:2] = ["personEins", 6]

Wir greifen hier auf das Prinzip des Slicings zurück und holen uns über [0:2] die ersten beiden Elemente aus der Liste und weisen ihnen neue Werte zu. Das Ergebnis wäre nun:

["personEins", 6, "person2", 6, "person3", 9, "person4", 4]

Um neue Elemente einer Liste hinzuzufügen, brauchen wir nur das Plus-Symbol nutzen. Wie im Kapitel “Variablen und Datentypen” erklärt, hängt das Verhalten des arithmetischen Operators “plus” von Datentyp ab. Bei Zahlen wird addiert, bei Strings zusammengefügt. Bei Listen führt Python deren Inhalte in einer einzigen Liste zusammen. Hier ein Beispiel:

sizes = ["person1", 5, "person2", 6, "person3", 9, "person4", 2]
sizes + ["person5", 9]
# Ausgabe: ["person1", 5, "person2", 6, "person3", 9, "person4", 2, "person5", 9]

Alternativ kann die neue Liste in einer separaten Variable gespeichert werden:

newSizes = sizes + ["person5", 9]

Das Löschen von Elementen aus einer Liste passiert über die del()-Funktion. Um z.B. das dritte Element zu löschen, müssen wir folgenden Befehl ausführen:

del(sizes[3])

Das Ergebnis ist nun:

["person1", 5, "person2", "person3", 9, "person4", 2]

Listen kopieren

Eine Liste zu kopieren ist ganz einfach, jedoch muss hier beachtet werden, dass bei einer einfachen Kopie vielmehr eine Referenz als Kopie hergestellt wird. Was heißt das? Schauen wir uns folgendes Beispiel:

a = ["a", "b", "c"]

Wir haben hier eine einfache Liste mit drei Elementen. Nun erstellen wir eine neue Liste “b” und weisen dieser neuen Liste die Element von der Liste “a” hinzu:

b = a

Nun ändern wir das zweite Element in Liste “b”:

b[1] = "x"

Schauen wir uns nun Liste “b” an, dann sehen wir:

["a", "x", "c"]

Aber Liste “a” sieht genauso jetzt aus:

["a", "x", "c"]

Hintergrund ist folgender: Wenn man eine Liste – in unserem Fall die Liste “a” – über das Gleichheitszeichen kopiert, dann wird der Verweis auf die Liste – in unserem Fall “[“a”, “b”, “c”]” – kopiert, aber nicht die Werte. Wenn nun einzelne Werte der Liste aktualisiert werden, dann ist es diesselbe Liste, die aktualisiert wird. Um also eine tatsächliche Kopie zu erstellen und keinen Verweis, gibt es folgende Möglichkeiten:

a = ["a", "b", "c"]
b = list(a)
b = a[:]

Entweder wird die Liste über die list()-Funktion kopiert oder wir nutzen wieder das Prinzip des Slicings und kopieren einfach alle Elemente in einer neuen Variable. Wenn wir nun Werte in der Liste “b” ändern, hat das keine Auswirkungen auf die Werte in “a”.

Keine Kommentare möglich.