3.1 Listen#

Bisher haben wir drei verschiedene Datentypen kennengelernt:

  • Integer (ganze Zahlen),

  • Floats (Fließkommazahlen) und

  • Strings (Zeichenketten).

Damit können wir einzelne Objekte der realen Welt ganz gut abbilden. Mit einem String können wir den Namen einer Person erfassen, mit einem Integer das Alter der Person und mit einem Float die Körpergröße der Person gemessen in Meter. Was uns aber bisher fehlt ist, eine Sammlung von Namen oder eine Sammlung von Körpergrößen verwalten zu können. Daher werden wir uns in diesem Jupyter Notebook mit Listen beschäftigen.

Lernziele#

Lernziele

  • Sie wissen, dass Container Datentypen sind, die andere Objekte als Sammlung verwalten.

  • Sie können eine Liste erzeugen.

  • Sie wissen, was der Fachbegriff Index bedeutet.

  • Sie können lesend und schreibend auf die Elemente einer Liste zugreifen, beherrschen also

    • Lesezugriff und

    • Schreibzugriff.

  • Sie können mit dem Plus-Operator + Listen verketten.

  • Sie können Elemente aus einer Liste löschen:

    • Löschung per Index: Funktion del

    • Löschung nach Wert: Methode remove

Container für Sammlungen#

In der Mathematik gibt es den Begriff des Vektors. Einen Vektor kann man als eine Sammlung von Zahlen interpretieren. Dabei müssen Vektoren nicht immer eine geometrische Interpretation haben. Beispielsweise steht der Vektor

(116, 144, 199)

für ein sehr schönes Blau, wenn die drei Komponenten als die Intensität der Farbanteile Rot - Grün - Blau interpretiert werden. Diese Art Farben zu beschreiben, wird RGB-Wert genannt (siehe auch Wikipedia → RGB-Farbraum). Die Internetseite https://www.color-hex.com ermöglicht es, die RGB-Werte verschiedener Farbtöne zu ermitteln.

Wir könnten aber auch eine Namensliste mit den Mitgliedern einer WG führen wollen, z.B. [“Alice”, “Bob”, “Charlie”]. Damit verlassen wir die mathematische Welt der Zahlen und damit des Vektors. Aber auch für diese Anwendungsszenarien wäre es schön, Daten gemeinsam zu sammeln und zu verwalten.

Der Fachbegriff für Datentypen, die daür gedacht sind, Daten als Sammlung zu verwalten, ist Container. In Python gibt es verschiedene Container:

  • Listen: list

  • Tupel: tuple

  • Dictionaries: dict

  • Mengen: set

Wir behandeln in diesem Abschnitt die Listen.

Listen erzeugen mit []#

Eine Liste wird in Python durch eckige Klammern [ ] erzeugt.

Betrachten wir ein Beispiel. Hier wird eine Liste mit den Elementen 1, 2, 3, 4, 5 erzeugt und dann anschließend in der Variablen liste_beispiel gespeichert. Mit der Funktion print() lassen wir den Inhalt der Liste ausgeben.

liste_beispiel = [1, 2, 3, 4, 5]
print(liste_beispiel)
[1, 2, 3, 4, 5]

Probieren Sie in der nächsten Mini-Übung selbst aus, wie eine Liste erzeugt wird.

Mini-Übung

Erzeugen Sie eine Liste mit Ihrem Vornamen, Ihrem Nachnamen und Ihrer Körpergröße in m. Welche Datentypen brauchen Sie für diese drei Objekte? Lassen Sie Ihre Liste auch ausgeben.

# Hier Ihr Code

Lösung

person = ['Alice', 'Musterfrau', 1.61]
print(person)

Vor- und Nachname werden durch Strings repräsentiert, die Körpergröße als Float.

Im folgenden Video können Sie sich die Erzeugung von Listen nochmal ansehen.

Elemente aus einer Liste herausholen: Zugriff#

Jede Liste hat einen Index. Man kann sich eine Liste wie eine Straße mit einer Sammlung von Häusern vorstellen. Um ein Haus in der Straße zu finden, hat es eine Hausnummer. Und das ist in der Informatik der Index, also die Position in der Liste, an der ein Element zu finden ist.

In jeder Programmiersprache gibt es Container mit einem Index, wobei der Index in der Regel durch Integer repräsentiert wird. Allerdings gibt es Unterschiede, bei welcher Zahl die Nummerierung beginnt. Python fängt mit der Null an. Dann können wir mit dem Index sozusagen nachsehen, welches Element an dieser Index-Position gespeichert ist. Das nennt man in der Informatik Lesezugriff. Oder wir können das Element an einer bestimmten Index-Position gegen ein neues Element austauschen. Das nennt man dann Schreibzugriff.

Um auf ein Element einer Liste zugreifen zu können (egal ob lesend oder schreibend), verwenden wir eckige Klammern und den Index. Der Lesezugriff für das erste Element sieht biepielsweise so aus:

# Erzeugung einer Liste
meine_liste = ['rot', 'grün', 'blau', 'gelb', 'weiß', 'schwarz']

# Lesezugriff mit Position 1, also Index 0
erstes_objekt = meine_liste[0]
print(erstes_objekt)
rot

In der nächsten Mini-Übung wird der Lesezugriff genutzt, um ein Element in einer neuen Variable zu speichern.

Mini-Übung

Speichern Sie das 4. Element der Liste meine_liste = ['rot', 'grün', 'blau', 'gelb', 'weiß', 'schwarz'] in der Variable vier ab und lassen Sie es ausgeben.

# Hier Ihr Code

Lösung

meine_liste = ['rot', 'grün', 'blau', 'gelb', 'weiß', 'schwarz']

vier = meine_liste[3]
print(vier)

Der Schreibzugriff erfolgt ebenfalls mit eckigen Klammern und dem Index.

Im folgenden Code sehen Sie, wie in der Liste die Farbe weiß durch lila ersetzt wird.

# Erzeugung Liste
meine_liste = ['rot', 'grün', 'blau', 'gelb', 'weiß', 'schwarz']

# Schreibzugriff
meine_liste[4] = 'lila'
print(meine_liste)
['rot', 'grün', 'blau', 'gelb', 'lila', 'schwarz']

Der Zugriff auf Listen wird auch in dem folgenden Video erklärt.

Liste + Liste = verkettete Liste#

Auch wenn es im ersten Moment verrückt erscheint, Python kann Listen addieren. Am besten schauen wir uns ein Beispiel an:

liste_de = ['rot', 'grün', 'blau']
liste_en = ['red', 'green', 'blue']

# Verkettung zweier Listen durch +
liste_de_en = liste_de + liste_en
print(liste_de_en)
['rot', 'grün', 'blau', 'red', 'green', 'blue']

Das Aneinanderhängen von Elementen zweier Container nennen wir in der Informatik Verkettung. Oft wird auch der englische Begriff Concatenation verwendet.

In der folgenden Mini-Übung können Sie die Verkettung ausprobieren.

Mini-Übung

Erzeugen Sie eine Liste mit den Monaten März, April und Mai und speichern Sie diese Liste in der Variable fruehling. Erzeugen Sie anschließend die Listen sommer, herbst und winter mit den jeweils passenden Monaten. Verketten Sie die vier Listen und speichern Sie in der Variable jahr ab. Lassen Sie zuletzt das Jahr anzeigen.

Welchen Index hat Ihr Geburtsmonat in der Liste jahr?

# Hier Ihr Code

Lösung

# Listen mit Monaten
fruehling = ['März', 'April', 'Mai']
sommer = ['Juni', 'Juli', 'August']
herbst = ['September', 'Oktober', 'November']
winter = ['Dezember', 'Januar', 'Februar']

# Jahr
jahr = fruehling + sommer + herbst + winter
print(jahr)

Der März hat den Index 0, der April den Index 1 usw… Der letzte Monat ist der Februar, der den Index 11 hat.

Elemente löschen mit del und remove#

Die Verkettung der Listen führt dazu, dass die Listen länger werden. Die Umkehrung davon fehlt noch, das Kürzen von Listen. Wie so oft in Python gibt es mehrere Möglichkeiten, ein Element aus einer Liste zu entfernen, also zu löschen. Die Anweisung del löscht das Element an einer bestimmten Position. Zuerst kommt die Anweisung, dann das Listenelement mit Index:

meine_liste = ['Null', 'Eins', 'Zwei', 'Drei', 'Vier', 'Fünf']
print('Vor dem Löschen: ')
print(meine_liste)

del meine_liste[2]
print('Nach dem Löschen')
print(meine_liste)
Vor dem Löschen: 
['Null', 'Eins', 'Zwei', 'Drei', 'Vier', 'Fünf']
Nach dem Löschen
['Null', 'Eins', 'Drei', 'Vier', 'Fünf']

Wie Sie sehen ist das dritte Element in der Liste gelöscht worden, da die Nummerierung des Index bei 0 startet.

Vielleicht möchte man aber gar nicht ein Element an einer bestimmten Position löschen, sondern einen bestimmten Eintrag. Das folgende Beispiel implementiert eine Einkaufsliste in Python. Sobald ein Lebensmittel gekauft ist, soll es von der Liste gestrichen werden.

einkaufsliste = ['Milch', 'Kaffee', 'Brötchen', 'Marmelade']

print('Einkaufsliste: ')
print(einkaufsliste)

einkaufsliste.remove('Brötchen')
print('Nach dem Einkauf in der Bäckerei: ')
print(einkaufsliste)

einkaufsliste.remove('Milch')
einkaufsliste.remove('Kaffee')
einkaufsliste.remove('Marmelade')
print('Nach dem Einkauf im Supermarkt: ')
print(einkaufsliste)
Einkaufsliste: 
['Milch', 'Kaffee', 'Brötchen', 'Marmelade']
Nach dem Einkauf in der Bäckerei: 
['Milch', 'Kaffee', 'Marmelade']
Nach dem Einkauf im Supermarkt: 
[]

Die Vorgehensweise, um das Element Milch zu löschen, ist diesmal komplett anders. Diesmal hängen wir an die Variable einkaufsliste einen Punkt und dann den Namen des Kommandos remove(). Wieso das?

Das Kommando del ist so wichtig und universell, dass es mit allen Containern funktioniert. Daher ist dieser Befehl als eine sogenannte Funktion im Python-Kern implementiert. Das Kommando remove() bezieht sich jedoch nur auf die Liste. Daher ist dieser Befehl als eine sogenannte Methode implementiert. Eine Methode ist eine Funktion, die zu einem Datentyp dazugehört.

In späteren Kapiteln werden wir selbst Funktionen und Methoden (Objektorientierung) implementieren und auf die Unterschiede detaillierter eingehen. Im Moment begnügen wir uns mit der Tatsache, dass es Funktionen wie

  • input()

  • print()

  • del()

gibt und Methoden, die mit einem Punkt an das Objekt angehängt werden wie z.B. .remove().