6. Unterrichtsblock
Listen anlegen
Bisher hat jede Variable genau einen Wert gespeichert. Für einen Einkaufszettel, eine Klassenliste oder eine Bestenliste bräuchtest du dann Dutzende Variablen. Eine Liste speichert beliebig viele Werte unter einem Namen. Du schreibst sie in eckige Klammern, die Elemente trennst du mit Kommas:
fruechte = ["Apfel", "Banane", "Kirsche"]
print(fruechte)
print(len(fruechte))
print(type(fruechte))
leer = []
print(len(leer))
['Apfel', 'Banane', 'Kirsche'] 3 <class 'list'> 0
| Eigenschaft | bedeutet |
|---|---|
| geordnet | Die Elemente behalten ihre Reihenfolge, neue kommen ans Ende. |
| indiziert | Jedes Element hat eine Nummer (Index), beginnend bei 0. |
| veränderbar | Elemente können nachträglich geändert, eingefügt und entfernt werden. |
| Duplikate erlaubt | Derselbe Wert darf mehrmals vorkommen. |
Gemischte Werte und doppelte Einträge
Eine Liste darf Werte verschiedener Datentypen enthalten, und derselbe Wert darf mehrmals vorkommen:
person = ["Lina", 16, True, 1.68]
noten = [2, 1, 2, 3, 2]
print(person)
print(noten)
print(len(noten))
['Lina', 16, True, 1.68] [2, 1, 2, 3, 2] 5
Listen aus anderen Werten bauen: list()
list() macht aus anderen Sammlungen eine Liste, zum Beispiel aus einem range() (Block 3) oder aus einem String (Block 5):
zahlen = list(range(1, 6))
buchstaben = list("Python")
print(zahlen)
print(buchstaben)
[1, 2, 3, 4, 5] ['P', 'y', 't', 'h', 'o', 'n']
Neben Listen kennt Python weitere Sammlungen: Tupel (wie Listen, aber unveränderlich, in runden Klammern), Sets und Dictionaries. Die lernst du später kennen.
Zugriff auf Elemente
Auf ein Element greifst du über seinen Index zu, genau wie bei den Zeichen eines Strings in Block 5. Gezählt wird ab 0, von hinten mit negativen Zahlen:
| Element | „Apfel“ | „Banane“ | „Kirsche“ | „Kiwi“ |
|---|---|---|---|---|
| Index | 0 | 1 | 2 | 3 |
| von hinten | -4 | -3 | -2 | -1 |
obst = ["Apfel", "Banane", "Kirsche", "Kiwi"]
print(obst[0])
print(obst[2])
print(obst[-1])
print(obst[4])
Apfel Kirsche Kiwi Traceback (most recent call last): ... IndexError: list index out of range
Die letzte Zeile bricht das Programm ab: Die Liste hat vier Elemente mit den Indizes 0 bis 3, einen Index 4 gibt es nicht.
Bereiche mit Slicing
Mit [start:ende] bekommst du eine neue Liste mit einem Ausschnitt. Wie bei Strings ist das Ende nicht enthalten, und eine dritte Zahl gibt die Schrittweite an:
obst = ["Apfel", "Banane", "Kirsche", "Orange", "Kiwi", "Melone", "Mango"]
print(obst[1:4])
print(obst[:3])
print(obst[4:])
print(obst[-3:])
print(obst[::2])
['Banane', 'Kirsche', 'Orange'] ['Apfel', 'Banane', 'Kirsche'] ['Kiwi', 'Melone', 'Mango'] ['Kiwi', 'Melone', 'Mango'] ['Apfel', 'Kirsche', 'Kiwi', 'Mango']
Ist ein Element in der Liste?
in und not in aus Block 4 funktionieren auch mit Listen. Verglichen wird das ganze Element, nicht ein Teil davon:
obst = ["Apfel", "Banane", "Kirsche"]
print("Banane" in obst)
print("Ban" in obst)
print("Mango" not in obst)
if "Kirsche" in obst:
print("Kirschen sind da.")
True False True Kirschen sind da.
len(liste) - 1 oder einfach -1. Beim Slicing ist das Ende nie enthalten: liste[1:4] liefert die Elemente mit Index 1, 2 und 3.Aufgabe 1 – Die Siegerehrung
Zeit: ca. 8 Minuten
Erst denken, dann tippen: Das ist die Zieleinlaufliste beim Schulsportfest. Sage für jede print-Zeile die Ausgabe voraus, schreibe sie als Kommentar dazu und prüfe sie dann.
platzierung = ["Lina", "Tom", "Ayşe", "Ben", "Mia", "Noah", "Ella"]
print(platzierung[0])
print(platzierung[-1])
print(platzierung[2:5])
print(platzierung[:3])
print(len(platzierung))
print("tom" in platzierung)
- Sage jede Ausgabe voraus und prüfe sie. Notiere bei jedem Irrtum kurz, woran es lag.
- Für das Siegertreppchen brauchst du die ersten drei, für die Urkunde „Teilgenommen“ alle ab Platz 4. Gib beide Gruppen mit Slicing aus. Kontrolle:
['Lina', 'Tom', 'Ayşe']und['Ben', 'Mia', 'Noah', 'Ella']. - Was passiert bei
platzierung[7]? Und warum gibtplatzierung[5:20]keinen Fehler? Antworte als Kommentar.
Elemente ändern
Listen sind veränderbar: Du kannst einem Element über seinen Index einen neuen Wert zuweisen. Bei Strings geht das nicht, die sind unveränderlich:
obst = ["Apfel", "Banane", "Kirsche"]
obst[1] = "Mango"
print(obst)
wort = "Hund"
wort[0] = "M"
['Apfel', 'Mango', 'Kirsche'] Traceback (most recent call last): ... TypeError: 'str' object does not support item assignment
Einen ganzen Bereich ersetzen
Weist du einem Bereich eine neue Liste zu, wird der Bereich ersetzt. Die neue Liste darf auch kürzer oder länger sein, dann rücken die übrigen Elemente entsprechend nach:
obst = ["Apfel", "Banane", "Kirsche", "Orange"]
obst[1:3] = ["Himbeere", "Melone"]
print(obst)
obst[1:2] = ["Erdbeere", "Zitrone", "Feige"]
print(obst, len(obst))
obst[0:3] = ["Ananas"]
print(obst, len(obst))
['Apfel', 'Himbeere', 'Melone', 'Orange'] ['Apfel', 'Erdbeere', 'Zitrone', 'Feige', 'Melone', 'Orange'] 6 ['Ananas', 'Feige', 'Melone', 'Orange'] 4
Elemente hinzufügen
Zum Hinzufügen gibt es drei Methoden. Wie bei Strings hängst du sie mit einem Punkt an. Anders als String-Methoden verändern sie die Liste selbst und liefern kein neues Ergebnis:
| Befehl | Wirkung | Liste vorher → nachher |
|---|---|---|
liste.append(3) | hängt genau ein Element ans Ende | [1, 2] → [1, 2, 3] |
liste.insert(1, 2) | fügt ein Element an Index 1 ein, der Rest rückt nach hinten | [1, 3] → [1, 2, 3] |
liste.extend([2, 3]) | hängt jedes Element einer anderen Sammlung einzeln an | [1] → [1, 2, 3] |
zettel = ["Brot"]
zettel.append("Milch")
zettel.insert(0, "Eier")
zettel.extend(["Käse", "Butter"])
print(zettel)
print(len(zettel))
['Eier', 'Brot', 'Milch', 'Käse', 'Butter'] 5
extend() nimmt jede Sammlung, zum Beispiel auch ein Tupel ("Kiwi", "Orange"). Eine ganze Liste mit append() anzuhängen, ist meist ein Versehen: Dann steckt die ganze Liste als ein einziges Element in der anderen.
liste.append(x) verändert die Liste und gibt nichts zurück. Schreibe deshalb nie liste = liste.append(x), sonst steht in liste danach None.Aufgabe 2 – append oder extend?
Zeit: ca. 8 Minuten
Jemand füllt einen Warenkorb. Nicht jede Zeile macht, was gemeint war.
korb = ["Apfel", "Brot"]
korb.append("Milch")
korb.extend(["Käse", "Eier"])
korb.append(["Saft", "Wasser"])
korb.extend("Tee")
korb.insert(1, "Butter")
- Sage für jede Zeile voraus, wie die Liste danach aussieht. Prüfe es, indem du nach jeder Zeile
print(korb)einfügst. - Wie viele Elemente hat
korbam Ende? Kontrolle: 10. - Zwei Zeilen waren sicher anders gemeint. Repariere sie so, dass jede Ware ein eigenes Element ist. Kontrolle: 9 Elemente.
Übungsaufgaben
Jetzt kombinierst du Listen mit if, while und input() aus den Blöcken 3 bis 5. Die Aufgaben 3 bis 7 sind die Kernaufgaben. Wer schneller fertig ist, macht mit den Bonusaufgaben weiter. Elemente entfernen, Listen sortieren und Listen mit for durchlaufen kommt in Block 7.
Aufgabe 3 – Der Einkaufszettel
Zeit: ca. 10 Minuten
Ein kleines Programm soll einen Einkaufszettel aufnehmen.
- Beginne mit einer leeren Liste
zettel = []. - Frage in einer
while-Schleife so lange nach Waren, bis nur Enter gedrückt wird. Jede Ware wird mitappend()angehängt. - Steht eine Ware schon auf dem Zettel, wird sie nicht noch einmal angehängt, sondern es erscheint „… steht schon drauf.“
- Gib am Ende die Anzahl, den ganzen Zettel sowie die erste und die letzte Ware aus. Ist der Zettel leer, erscheint „Nichts zu kaufen.“
Zusatz: Beginnt eine Eingabe mit „!“ (z. B. !Milch), ist sie dringend: Sie kommt ohne das Ausrufezeichen an die erste Stelle (insert() und Slicing aus Block 5).
Aufgabe 4 – Die Sitzordnung
Zeit: ca. 8 Minuten
Im Computerraum sitzen alle in einer Reihe, Platz 1 ist ganz links. Die Lehrkraft stellt die Sitzordnung um. Gib die Liste nach jedem Schritt aus.
sitzplan = ["Lina", "Tom", "Ayşe", "Ben", "Mia", "Noah"]
- Ben und Mia tauschen die Plätze. Tipp: Merke dir einen Namen kurz in einer eigenen Variablen.
- Die neue Schülerin Ella setzt sich auf Platz 3, alle ab dort rücken einen Platz weiter.
- Die ersten beiden Plätze werden durch die drei Austauschschüler „Luca“, „Sofia“ und „Jan“ ersetzt (ein einziger Befehl mit Slicing).
- Gib aus, wer jetzt auf Platz 1 und wer auf dem letzten Platz sitzt, und wie viele Plätze besetzt sind.
Kontrolle: ['Luca', 'Sofia', 'Jan', 'Ella', 'Ayşe', 'Mia', 'Ben', 'Noah'], 8 Plätze.
Aufgabe 5 – Die Wochenplanung
Zeit: ca. 8 Minuten
Zwei Listen gehören zusammen: An derselben Stelle stehen ein Wochentag und sein Termin.
wochentage = ["Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag", "Sonntag"]
termine = ["frei", "frei", "frei", "frei", "frei", "frei", "frei"]
- Frage nach der Nummer eines Tages (1 = Montag bis 7 = Sonntag) und nach einem Termin.
- Ist die Nummer nicht zwischen 1 und 7, erscheint „Diesen Tag gibt es nicht.“ Sonst trägst du den Termin an der richtigen Stelle in
termineein. Achtung: Die Liste beginnt bei Index 0. - Gib zur Kontrolle den Tag und seinen neuen Termin aus, z. B.
Donnerstag: Python-Unterricht.
Zusatz: Gib das Wochenende (die letzten zwei Tage) samt Terminen mit Slicing aus.
Aufgabe 6 – Datum zerlegen
Zeit: ca. 10 Minuten
Ein Datum wie 07.10.2026 soll schöner ausgegeben werden: 7. Oktober 2026.
monate = ["Januar", "Februar", "März", "April", "Mai", "Juni",
"Juli", "August", "September", "Oktober", "November", "Dezember"]
- Frage nach einem Datum im Format TT.MM.JJJJ. Zerlege es mit
split("."). Das Ergebnis ist eine Liste mit drei Texten. - Wandle Tag und Monat mit
int()in Zahlen um. Ist der Monat nicht zwischen 1 und 12, erscheint eine Fehlermeldung. - Hole den Monatsnamen aus
monateund gib das Datum aus. Kontrolle:07.10.2026ergibt7. Oktober 2026.
Zusatz: Gib das Quartal aus (Januar bis März = 1. Quartal usw.) und die drei Monate dieses Quartals mit Slicing. Tipp: (monat - 1) // 3 + 1.
Aufgabe 7 – Die Mannschaftswahl
Zeit: ca. 10 Minuten
Für ein Spiel in der Sportstunde wird die Klasse abwechselnd auf zwei Mannschaften verteilt: der Erste in Team A, der Zweite in Team B, der Dritte wieder in Team A und so weiter.
klasse = ["Lina", "Tom", "Ayşe", "Ben", "Mia", "Noah", "Ella", "Jan", "Sofia", "Luca"]
- Bilde
team_aundteam_bmit Slicing und Schrittweite (Block 5), ohne Schleife. Kontrolle Team A:['Lina', 'Ayşe', 'Mia', 'Ella', 'Sofia']. - Gib beide Teams mit ihrer Größe aus. Der Kapitän ist jeweils der Erste im Team.
- Zwei Nachzügler kommen dazu („Emil“ und „Lea“). Jeder wird an das Team angehängt, das gerade kleiner ist (bei Gleichstand Team A).
- Frage nach einem Namen und gib aus, in welchem Team die Person spielt, oder „spielt nicht mit“.
Bonusaufgabe 1 – Der Kinosaal
Eine Liste kann wieder Listen enthalten. So lässt sich ein kleiner Kinosaal mit 3 Reihen zu je 4 Plätzen speichern. saal[1][2] ist Reihe 2, Platz 3.
saal = [
["frei", "frei", "frei", "frei"],
["frei", "besetzt", "besetzt", "frei"],
["frei", "frei", "frei", "frei"],
]
- Gib die drei Reihen untereinander aus (
saal[0],saal[1],saal[2]). - Frage nach Reihe und Platz (jeweils ab 1 gezählt). Ist der Platz frei, wird er auf „besetzt“ gesetzt, sonst erscheint „Leider schon besetzt.“
- Prüfe vorher, ob Reihe und Platz überhaupt existieren (
len(saal)undlen(saal[0])).
Zusatz: Baue eine vierte Reihe mit append() an, in der alle 4 Plätze frei sind.
Bonusaufgabe 2 – Die Würfelstatistik
Ist ein Würfel fair? Lass den Computer 600-mal würfeln und zähle mit, wie oft jede Augenzahl fällt. Eine Liste mit sechs Zählern ist dafür ideal.
import random
anzahl = [0, 0, 0, 0, 0, 0] # anzahl[0] zählt die Einsen, anzahl[5] die Sechsen
- Würfle mit
for wurf in range(600):undrandom.randint(1, 6). Erhöhe nach jedem Wurf den passenden Zähler um 1. - Gib die Zählerliste aus und dazu jede Augenzahl einzeln, z. B.
Sechsen: 103. - Prüfe, ob alle Zähler zusammen 600 ergeben.
Zusatz: Welche Anzahl würdest du bei einem fairen Würfel für jede Augenzahl erwarten? Wie weit liegen deine Werte davon weg? Antworte als Kommentar.
- Eine Liste speichert viele Werte unter einem Namen:
fruechte = ["Apfel", "Banane"].len()liefert die Anzahl. - Zugriff über den Index ab 0,
-1ist das letzte Element. Bereiche mit[start:ende], das Ende ist nicht enthalten. inundnot inprüfen, ob ein Element in der Liste steht.- Ändern:
liste[1] = "neu"oder ganze Bereicheliste[1:3] = [...]. - Hinzufügen:
append()ein Element ans Ende,insert(i, x)an Index i,extend()alle Elemente einer anderen Sammlung.

