Zum Hauptinhalt springen
Version: 29Ga

2. Listen

Zum Speichern von mehreren Werten unter einem einzigen Namen werden beim Programmieren Listen oder Arrays verwendet. Listen sind vergleichbar mit einspaltigen Tabellen. Die Zellen in der Tabelle werden als Elemente bezeichnet und sind durchnummeriert. So können einzelne Werte, die in der Liste gespeichert sind, voneinander unterschieden werden. Die Nummer eines Elements wird als dessen Index bezeichnet.

Wichtig
  • Das erste Element in der Liste trägt den Index 0.
  • Der Index des letzten Elementes ist somit die Länge der Liste minus 1.

Die folgende Auflistung illustriert dies für eine Liste mit 4 Noten. Die Länge der Liste ist 4, das letzte Element trägt den Index 3.

Index
Wert
0
4.5
1
5
2
3.5
3
5.5

In Python lassen sich Listen mit eckigen Klammern [ ] wie folgt erzeugen:

noten = [4.5, 5, 3.5, 5.5]
print('Die vierte Note war eine', noten[3])

Im Beispiel wird die vierte Note mit dem Index 3 ausgegeben.

Python Listen: Befehle​

Am Ende jedes Abschnitts finden Sie eine kurze Aufgabe für etwa fünf Minuten. Ergänzen Sie Ihren Code jeweils direkt im Python-Editor und führen Sie ihn zur Kontrolle aus.

Liste erzeugen​

# Liste erzeugen und Variablen zuweisen
noten = [3.5, 6, 5, 4.5]

# Ganze Liste anzeigen
print(noten)
# Element mit Index 2 aus der Liste anzeigen
print(noten[2])

Leere Liste []​

# Leere Liste erstellen
noten = []
print(noten)

Liste mit Text​

# Liste mit Strings
noten =['gut', 'erfüllt', 'mangelhaft', 'erfüllt']
print(noten)

Länge einer Liste: len(<liste>)​

noten = [4.5, 5, 3.5, 5.5]

print(len(noten))

Schleife über alle Elemente der Liste​

Anstatt mit range() einen Schleifeniterator zu erzeugen, kann auch direkt eine explizite Liste angegeben werden. Die Laufvariable nimmt dabei nacheinander die Werte der Liste an.

noten = [3.5, 6, 5, 4.5]

for note in noten:
print(note)
Laufvariable

Die Laufvariable note nimmt in jedem Schleifendurchlauf den Wert des nächsten Elements der Liste noten an.

Schleife über Listen-Indices​

noten = [3.5, 6, 5, 4.5]

länge = len(noten) # Länge der Liste ermitteln

for index in range(länge):
print(index, ":", noten[index])
range(länge)

Bisher war es teilweise eher mühsam, dass mit bspw. range(5) die Laufvariable die Zahlen 0, 1, 2, 3, 4 annimmt. Mit Listen ist dies nun aber sehr praktisch, da es gerade genau dem Indexbereich der Liste entspricht.

Alien-Crew zum Appell

Das Raumschiff «Fliegende Untertasse mit WLAN» braucht eine Anwesenheitsliste.

  1. Ersetzen Sie die leere Liste durch die Namen Blub, Zorg, Wackelpudding und Professor Quak in dieser Reihenfolge.
  2. Geben Sie mit len() die Anzahl der Crewmitglieder aus.
  3. Geben Sie mit einer Schleife über die Indizes alle Namen mit einer Platznummer aus. Die Platznummern sollen bei 1 beginnen, obwohl die Listenindizes bei 0 beginnen.

Die Ausgabe soll also wie folgt aussehen:

Crewmitglieder: 4
1 Blub
2 Zorg
3 Wackelpudding
4 Professor Quak
crew = []
# Ergänzen Sie die Liste und den Appell.
Laden...

Elemente abfragen​

Erstes Element: <liste>[0]​

noten = [4.5, 5, 3.5, 5.5]
if len(noten) > 0:
print(noten[0])

Bemerken Sie: es wird zuerst überprüft, ob die Liste überhaupt ein Element enthält. Nur dann wird dieses Element abgerufen und ausgegeben.

Letztes Element <liste>[-1]​

noten = [4.5, 5, 3.5, 5.5]
if len(noten) > 0:
print(noten[-1])
# oder gleichbedeutend
print(noten[len(noten) - 1])

Fehler: IndexError​

Fragt man einen Index ab, den es nicht gibt (weil es zu wenige Elemente in der Liste hat), so entsteht ein IndexError.

Beispiel:

noten = [3.5, 6, 5, 4.5]

# Eine Liste mit 4 Elementen: Grösster Index ist 3
noten[4] = 6
Das geplünderte Geisterbuffet

Beim Geisterbuffet verschwinden die Speisen manchmal schon vor dem Essen. Schreiben Sie ein Programm, das die erste und die letzte Speise mit den Beschriftungen Vorspeise: und Dessert: ausgibt. Ist die Liste leer, soll stattdessen nur Alles weggegeistert! erscheinen.

Testen Sie Ihren Code mit der vorgegebenen Liste, danach mit buffet = ['Nebelwatte'] und schliesslich mit buffet = []. Er darf bei keinem dieser Tests einen IndexError erzeugen. Bei der ursprünglichen Liste sind Spinnensalat und Schokogespenst gesucht; bei nur einer Speise ist diese gleichzeitig Vorspeise und Dessert.

buffet = ['Spinnensalat', 'Kürbissuppe', 'Schokogespenst']
# buffet = ['Nebelwatte']
# buffet = []

# Prüfen Sie zuerst, ob das Buffet noch etwas enthält.
Laden...

Elemente Verändern​

Zuordnung: <liste>[index] = <wert>​

Ein Element in der Liste kann durch eine Zuordnung verändert werden. Im untenstehenden Beispiel werden alle ungenügenden Noten auf eine 5 gesetzt.

noten = [4.5, 5, 3.5, 5.5]
for i in range(len(noten)):
if noten[i] < 4:
noten[i] = 5
print(noten)
Roboter mit Morgenmuffel-Akku

Fünf Haushaltsroboter sollen aufräumen. Einige haben aber kaum noch Energie und behaupten, sie seien «im Energiesparmodus». Die Liste enthält ihre Akkustände in Prozent.

Gehen Sie mit einer Schleife über alle Indizes. Jeder Akkustand unter 20 soll um 30 Prozentpunkte erhöht werden; die anderen Werte bleiben gleich.

Hinweis

Schreiben Sie die fertige Ergebnisliste nicht direkt in den Code.

Zur Kontrolle: Aus der vorgegebenen Liste soll [45, 80, 35, 60, 30] werden. Testen Sie danach mit [20, 19, 100]: Das Ergebnis muss [20, 49, 100] sein.

akkus = [15, 80, 5, 60, 0]
# Laden Sie nur die müden Roboter auf.
Laden...

Elemente Hinzufügen/Entfernen​

hinzufügen: <liste>.append(<wert>)​

append fügt ein neues Element am Ende der Liste hinzu.

noten = [4.5, 5, 3.5, 5.5]
print('Ursprünglich', noten)
noten.append(6)
print('Neu', noten)

An beliebiger Stelle einfügen: <liste>.insert(<index>, <wert>)

noten = [4.5, 5, 3.5, 5.5]
print('Ursprünglich', noten)
noten.insert(1, 6) # Bei Index 1 (2. Stelle) wird eine 6 eingefügt
print('Neu', noten)

entfernen: <liste>.pop(<index>)​

Entfernt das Element an der Stelle index und gibt dieses zurück:

noten = [4.5, 5, 3.5, 5.5]
entfernt = noten.pop(2)
print('Entfernt', entfernt)
print('Noten', noten)

Aufsteigend sortieren <liste>.sort()​

noten = [3.5, 6, 5, 4, 4.5, 5]

noten.sort()
print(noten)

Listen Untersuchen​

Maximum: max(<liste>)​

Gibt das maximale Element einer numerischen Liste zurück

noten = [4.5, 5, 3.5, 5.5]
print('Beste Noten', max(noten))

Minimum: min(<liste>)​

Gibt das minimale Element einer numerischen Liste zurück

noten = [4.5, 5, 3.5, 5.5]
print('Schlechteste Noten', min(noten))

Wert in einer Liste? <wert> in <liste>​

Überprüft, ob sich ein Wert in einer Liste befindet

noten = [4.5, 5, 3.5, 5.5]
if 6 in noten:
print('Glückwunsch, du hast min. einmal eine 6 geschrieben')
else:
print('Du hast noch keine 6 geschrieben')

Anzahl Elemente mit einem Wert? <liste>.count(<wert>)​

Zählt, wie oft sich ein Wert in einer Liste befindet.

noten = [4.5, 5, 3.5, 5.5, 5]
for i in [1, 1.5, 2, 2.5, 3, 3.5, 4, 4.5, 5, 5.5, 6]:
if noten.count(i) > 0:
print(f'Anzahl {i}: {noten.count(i)}')
Schnarch-O-Meter im Klassenlager

Ein Messgerät hat die Schnarchlautstärke im Schlafsaal gemessen: 0 bedeutet Stille, 9 bedeutet «Ein Traktor schläft im oberen Bett».

Erstellen Sie aus den Messwerten einen kurzen Bericht:

  1. Geben Sie mit max() und min() den lautesten und den leisesten Wert aus.
  2. Berechnen Sie den Unterschied zwischen diesen beiden Werten und geben Sie ihn aus.
  3. Zählen Sie mit count(), wie oft die Lautstärke 9 gemessen wurde.
  4. Prüfen Sie mit in, ob eine 0 vorkommt. Geben Sie dann Endlich Ruhe! aus, andernfalls Nicht einmal die Socken konnten schlafen.
  5. Testen Sie Ihren Code mit der verborgenen Liste klassenlager, welche 23 zufällige Messwerte enthält.

Zur Kontrolle: Maximum 9, Minimum 1, Unterschied 8, drei Traktormomente und keine Stille. Ersetzen Sie danach den ersten Messwert durch 0 und prüfen Sie, ob sich Ihr Bericht passend ändert.

lautstärken = [2, 9, 4, 9, 1, 9]
# Werten Sie die nächtlichen Geräusche aus.
Laden...