Listen
MERKE
Eine Liste ist eine Datenstruktur, die eine beliebige Anzahl an Elementen zwischenspeichert. Sie wird mit eckigen Klammern[ ]
dargestellt; ihre Elemente werden mit Kommata getrennt.Jedes Element hat eine “Positionsnummer”, den Index. Achtung: Das vorderste/ganz linke Element hat Index 0!
Aufgabe 1
Weise mal folgenden Variablen die angegebenen Listen als Werte zu und
gib sie mit print
aus.
zahlen = [1, 2, 3, 4, 5, 6]
gemischt =[True, "String", " ", 3]
MERKE
Die Länge einer Liste ist einfach die Anzahl ihrer Elemente und kann mit der Funktionlen()
ermittelt werden.[]
ist übrigens auch ein zulässiger Ausdruck, das stellt die leere Liste dar. Vorsicht, Verwirrung: Die leere Liste [] ist nicht gleich der leeren VariableNone
!
Aufgabe 2
Probiere mal folgende Anweisungen aus!
len([1, 2, 3, 4, 5, 6])
len([])
len(None) # Das gibt natürlich einen Fehler. Nix hat
schließlich auch keine Länge
Zugriff auf Daten
Wie greift man jetzt auf die Elemente einer Liste zu, zum Beispiel, um mit Ihnen zu rechnen oder sie einfach nur auszugeben?
Folgendes Beispiel:
liste = [1, 2, 3, 4, 5, 6]
-
Die ganze Liste ausgeben:
print(liste)
-
Ein Element aus der Liste lesen
liste[Index] # Erinnerung: Index ist die #Positionsnummer von links beginnend bei 0!
Also hier z.B.:
liste[0] liste[4]
MERKE
Da der Index bei 0 beginnt, hat das letzte/ganz rechte Element Indexlen(liste) - 1
!
Eine Liste mit drei Elementen hat also Länge 3, niedrigsten Index 0 und höchsten Index 2.
Folgender Code gibt den demnach einen Fehler, aber sieh selbst:kurze_liste = [1, 2, 3] kurze_liste[3]
-
Ein Element aus der Liste lesen und in einer Variable speichern
wert = liste[Index]
-
Hier z.B.:
das_erste = liste[0] print(das_erste)
-
Ein Element in einer Liste ändern:
liste[Index] = neuer_wert
Aufgabe 3
Probiere folgendes aus:
print(liste)
liste[2] = "hier bin ich"
print(liste)
Zugriff auf Daten - Übung
zahlen = [12, 4, 6, 9, 10, 6, 7]
Bearbeite die Aufgaben nacheinander. Gib jeweils das Ergebnis mit print
aus.
Aufgabe 4
Setze das Element mit Index 3 auf die Zahl 4.
Aufgabe 5
Lies den Wert am Index 1 aus und speichere ihn in einer Variable ab.
Lies den Wert am Index 4 aus und speichere ihn in einer weiteren Variable
ab.
Addiere beide und gib das Ergebnis aus.
Listenfunktionen
Einige wichtige Operatoren und Funktionen, die auf Listen angewandt werden können:
- +: Konkatenation (D.h. "Aneinanderhängen") zweier Listen
liste1 = [1, 2]
liste2 = [3, 4]
liste1 + liste2 # Das ergibt [1, 2, 3, 4]
len
: Länge der Liste
len([1, 2, "viele"])
-
min
undmin
: Minimum/Maximum in der Liste (nur bei Zahlen möglich)min([0, 5, -10]) max([0, 5, -10])
-
sum
: Summe aller Elemente in der Liste (nur bei Zahlen möglich)sum([9,1,2,3,5])
Listenfunktionen - Übung
liste1 = [5, 9, 2]
liste2 = [4, 1, 0]
Aufgabe 6
Verbinde die beiden Listen (d.h. hänge sie aneinander) und speichere das
Ergebnis wieder in der Variable liste2
.
Aufgabe 7
Lasse das Minimum der Liste liste1
ausgeben.
Aufgabe 8
Lasse die Summe der Werte in der Liste liste1
ausgeben.
Listenfunktionen 2
Es gibt noch ein paar weitere wichtige vordefinierte Funktionen im Zusammenhang mit Listen, die du kennen solltest:
-
append(x)
: Fügt einen Wertx
am Ende der Liste hinzu:liste = ["Schere", "Stein"] print(liste) liste.append("Paar Bier") print(liste)
-
remove(x)
: Entfernt einen Wertx
aus der Liste (Genauer: entfernt das erste Element in der Liste, das den Wertx
hat.)liste = ["Schere", "Stein", "Papier", "Brunnen"] print(liste) liste.remove("Brunnen") print("Ohne Brunnen!") print(liste)
-
insert(i, x)
: Fügt einen Wertx
an der Position (an Index)i
einliste = ["Erstens", "Zweitens", "Viertens"] print(liste) liste.insert(2, "Drittens") print(liste)
Listenfunktionen 2 - Übung
liste1 = [1, "Passau", 4, 6, "Berlin"]
Aufgabe 9
Füge “Hamburg” am Ende der liste1 an und gebe die Liste aus.
Aufgabe 10
Entferne “Berlin” aus der Liste und gebe die Liste neu aus.
Aufgabe 11
Füge 42 am Index 0 ein. Gib die Liste erneut aus.
Listen und Schleifen
Nehmen wir mal an, wir haben eine Eisdiele überfallen und möchten jetzt jede Eissorte aus der Liste
ice_cream = ["Schoko", "Erdbeere", "Vanille"]
einzeln ausgeben.
Es bietet sich an, mit einer Schleife nacheinander jedes Element aus der Liste zu holen und auszugeben.
Praktisch ist hier vor allem die for-Schleife:
Bisher:
for i in range(anfang, ende):
...
range(anfang, ende)
kann durch eine beliebige Liste ersetzt werden!
Das heißt wir können mit der for-Schleife einmal die Liste durchgehen.
Probier das mal mit folgendem Code aus: \
ice_cream = ["Schoko", "Erdbeere", "Vanille"]
for ice in ice_cream:
print(ice + " mit Schokosauce")
Chatbot: Wahrheit und Lüge
Aufgabe 12
Zurück zu unserem kleinen Chatbot, den gibt es ja auch noch!
Der soll jetzt eine abgewandelte Version von “2 Wahrheiten und 1 Lüge”
spielen können:
Das soll so, wie der folgende Pseudocode aufgebaut sein:
lege eine leere Liste an
solange Eingabe nicht 'stop' ist
lies einen Satz ein
hänge diesen Satz an die Liste
nimm zufällig einen Index (eine Positionsnummer) zwischen 0 und
der Länge der Liste - 1 (!)
nimm das Element mit diesem Index aus der Liste
gib sowas aus wie `Das ist die Lüge` + dieses Element
MERKE
Eine Zufallszahl kannst du mitrandint(untergrenze, obergrenze)
erzeugen, also zum Beispielrandint(0, 5)
Diese Funktion musst du allerdings mit folgender Zeile einbinden
from random import randint
Platziere diese am Besten ganz oben in deiner Projektdatei.
Zusatzinfo: 2-dimensionale Liste
Um es noch ein bisschen komplizierter zu machen lernst du jetzt mehrdimensionale Listen kennen!
MERKE
Man kann auch Listen ineinander schachteln, also eine “Liste von Listen von Listen von … usw.” bauen. Man sagt dazu dann auch mehrdimensionale Liste.Konkret: Wenn die “Schachtelungstiefe” zum Beispiel 2 ist (also eine “Liste von Listen”), spricht man von einer zweidimensionalen Liste. Das entspricht mathematisch gesehen einer Matrix!
Eine zweidimensionale Liste bzw. Matrix:
matrix = [[1, 2], [3, 4]]
$$ \begin{bmatrix} 1 & 2 \newline 3 & 4 \end{bmatrix} $$
Das ist also eigentlich eine Liste von Zeilen der Matrix, wobei jede Zeile wiederum selbst eine Liste (von Zahlen) ist.
MERKE
Zugriff auf Elemente zweidimensionaler Listen "Eine Dimension nach der anderen"matrix[0] # Das gibt hier [1, 2], also die #erste Zeile (Die hat Index 0) der Matrix, #also eine Liste matrix[0][1] # Das nimmt zuerst die erste #Zeile (Die hat Index 0) der Matrix, #also [1, 2], und davon dann das Element #mit Index 1, also hier den Wert 2.
Aufgabe 13
Lass die Liste matrix
ausgeben
Aufgabe 14
Lass das zweite Element (also das mit Index 1) von matrix
ausgeben.
Aufgabe 15
Ändere die erste Zeile von matrix
auf [10, 11]
.
Aufgabe 16
Erstelle eine Schleife, die einmal jedes Element der Liste matrix
(also jede Zeile) einzeln ausgibt.
Aufgabe 17
Versuche die 10 aus matrix
zu entfernen und gib die geänderte matrix
aus.
Zusatz 1
Aufgabe 18 (Pro)
Erstelle drei leere Listen für drei beliebige Schulfächer.
Nutze eine zusätzliche Schleife, um nacheinander beliebig viele Noten für
jedes dieser Fächer einzulesen.
Aufgabe 19 (Pro+)
Ändere dein Programm so, dass der Nutzer bei der Eingabe jeder einzelnen
Note entscheiden kann, welchem Fach sie zugeordnet werden soll.
Bedenke auch den Fall, dass ein Nutzer versucht, für ein “ungültiges” Fach
(also keines der drei festgelegten) Werte einzugeben. Teile ihm in diesem
Fall mit, dass das bedauerlicherweise nicht möglich ist.
Aufgabe 20 (Crack)
Verwende statt drei einzelnen Liste eine zweidimensionale Liste.
…Klingt einfach, ist aber gar nicht so ohne ;)
Zusatz 2
MERKE Für die folgenden Zusatzaufgabe solltest du dich schon mal mit dem nächsten Kapitel vertraut machen. Andernfalls kannst du auch einfach die sogenannte Funktion weglassen oder dir eine Aufgabe im Kapitel mit den Zusatzaufgaben ansehen.
Achtung, in diesem Abschnitt wird es noch einmal sehr mathematisch! Es geht nämlich um Matrizen. Warum wir das machen? Matrizen spielen in vielen Anwendungsbereichen eine große Rolle: Machine Learning, Game Development, Robotik, … in all diesen Bereichen arbeiten Programme fast nur mit Matrizen!
Aufgabe 21 (Matrixdarstellung)
Definiere eine eigene Funktion print_matrix
, die eine Matrix als
Parameter übergeben bekommt und diese dann in schöner “Tabellenform”
ausgibt. Tipp: Benutze dazu verschachtelte Schleifen.
Rufe die Funktion ein paar mal mit verschiedenen Werten auf, um sie
gründlich zu testen.
Aufgabe 22 (Transponieren)
Erstelle eine weitere Funktion transpose, die eine Matrix als Parameter
erhält und sie transponiert:
Aus
$$ \begin{bmatrix} a & b \newline c & d \end{bmatrix} $$
soll
$$ \begin{bmatrix} a & c \newline b & d \end{bmatrix} $$
werden.
Zur Vereinfachung kannst du voraussetzen, dass die Funktion nur
$$ 2 \times 2 $$
Matrizen bekommt.
Aufgabe 23 (Matrizenmultiplikation) \
Schreibe eine Funktion matmul
die zwei Matrizen als Parameter bekommt
und damit eine Matrizenmultiplikation ausführt. Also
$$ \begin{bmatrix} a_{11} & a_{12} \newline a_{21} & a_{22} \end{bmatrix} \times \begin{bmatrix} b_{11} & b_{12} \newline b_{21} & b_{22} \end{bmatrix} = \begin{bmatrix} a_{11}b_{11} + a_{12}b_{21} & a_{11}b_{12} + a_{12}b_{22} \newline a_{21}b_{11} + a_{22}b_{21} & a_{21}b_{12} + a_{22}b_{22} \end{bmatrix} $$
Zur Vereinfachung kannst du wieder voraussetzen, dass die Funktion nur
$$ 2 \times 2 $$
Matrizen bekommt.
Aufgabenempfehlung im Zusatzkapitel
- Moving Average