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 Funktion len() 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 Variable None!

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]

MERKE
Da der Index bei 0 beginnt, hat das letzte/ganz rechte Element Index len(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]
1 0 3 2 1 0 3 2 -1 0 4 5 7

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:

liste1 = [1, 2]
liste2 = [3, 4]
liste1 + liste2 # Das ergibt [1, 2, 3, 4]
len([1, 2, "viele"])

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:


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 mit randint(untergrenze, obergrenze) erzeugen, also zum Beispiel

randint(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




Feedback

Du hast Feedback zu diesem Kapitel oder du hast einen Fehler gefunden? Dann schreib mir gerne, damit ich den Fehler schnell beheben kann :)