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]

Was ist der Index von 'Salat' in der folgenden Liste? ['Salat', 'Äpfel', 'KĂ€se']

WĂ€hle mindestens eine Antwort

Was ist der Index von KĂ€se in der folgenden Liste? ['Salat', 'Äpfel', 'Bier', 'Wein', 'KĂ€se']

WĂ€hle mindestens eine Antwort

Was gibt der folgende Code aus? print(len(['Salat', 'Äpfel', 'KĂ€se', 'Gurken']))

WĂ€hle mindestens eine Antwort

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]]

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

soll

werden.

Zur Vereinfachung kannst du voraussetzen, dass die Funktion nur

Matrizen bekommt.

Aufgabe 23 (Matrizenmultiplikation) \

Schreibe eine Funktion matmul die zwei Matrizen als Parameter bekommt und damit eine Matrizenmultiplikation ausfĂŒhrt. Also

Zur Vereinfachung kannst du wieder voraussetzen, dass die Funktion nur

Matrizen bekommt.


Aufgabenempfehlung im Zusatzkapitel


Dein Feedback zu diesem Kapitel