Grundlagen G07 (Schulabgleich 09.0 & 11.0)

Listen & Sequenzen in Python 🚂📋

Lerne, wie du Daten in Listen sammelst, mit Index und Slicing zuschneidest und mit Methoden verwaltest.

📂 Dateien dieser Einheit:
💻 In Web-IDE öffnen → 📄 aufgabe.py (Startercode) 🧪 test_aufgabe.py (Tests) 💡 musterloesung.py (Lösung) 📖 README.md

1. 🚂 Die Zugwaggon-Analogie: Was ist eine Liste?

Eine Liste (list) ist ein geordneter Behälter für mehrere Werte. Du kannst dir eine Liste wie einen Zug mit durchnummerierten Waggons vorstellen:

Zugwaggons & Indexe:

Jedes Element hat einen festen Platzhalter – den Index. Python zählt immer ab 0!

Positiver Index 0 1 2 3 4
Werte (Waggons) "Apfel" "Banane" "Kirsche" "Dattel" "Erdbeere"
Negativer Index -5 -4 -3 -2 -1
Python: Index-Zugriff
fruechte = ["Apfel", "Banane", "Kirsche", "Dattel", "Erdbeere"]

print(fruechte[0])   # -> "Apfel" (Erstes Element)
print(fruechte[2])   # -> "Kirsche" (Drittes Element)
print(fruechte[-1])  # -> "Erdbeere" (Letztes Element)
print(fruechte[-2])  # -> "Dattel" (Vorletztes Element)

2. ✂️ Slicing: Teile einer Liste herausschneiden

Mit dem Slice-Muster liste[start:stop:step] schneidest du beliebige Teilbereiche heraus. Wichtig: Der stop-Index ist immer exklusiv (wird nicht mitgenommen)!

Python: Slicing Beispiele
zahlen = [10, 20, 30, 40, 50, 60]

# 1. Bereich von Index 1 bis vor Index 4:
print(zahlen[1:4])   # -> [20, 30, 40]

# 2. Vom Anfang bis vor Index 3:
print(zahlen[:3])    # -> [10, 20, 30]

# 3. Ab Index 3 bis ganz zum Schluss:
print(zahlen[3:])    # -> [40, 50, 60]

# 4. Alle Elemente ohne erstes und letztes:
print(zahlen[1:-1])  # -> [20, 30, 40, 50]

# 5. Jedes 2. Element (Schrittweite 2):
print(zahlen[::2])   # -> [10, 30, 50]

# 6. Liste komplett rückwärts:
print(zahlen[::-1])  # -> [60, 50, 40, 30, 20, 10]
💡 Slicing erzeugt immer eine NEUE Liste:
Wenn du kopie = zahlen[:] oder rueckwaerts = zahlen[::-1] schreibst, bleibt die Original-Liste völlig unverändert!

3. 🛠️ Methoden & Eingebaute Funktionen

Listen bieten praktische Werkzeuge, um Elemente zu verändern, zu durchsuchen und auszuwerten:

Python: Listen manipulieren
tiere = ["Hund", "Katze"]

# Am Ende anfügen:
tiere.append("Maus")         # -> ["Hund", "Katze", "Maus"]

# An bestimmter Stelle einfügen:
tiere.insert(0, "Papagei")   # -> ["Papagei", "Hund", "Katze", "Maus"]

# Letztes Element entfernen und zurückgeben:
raus = tiere.pop()           # raus = "Maus", Rest: ["Papagei", "Hund", "Katze"]

# Bestimmten Wert sicher mit 'in' prüfen und entfernen:
if "Katze" in tiere:
    tiere.remove("Katze")    # Entfernt "Katze"

# Sortieren & Umdrehen (in-place am Original):
tiere.sort()
tiere.reverse()
⚠️ Vorsicht bei .remove():
Wenn du liste.remove("Etwas") aufrufst und "Etwas" gar nicht in der Liste ist, stürzt dein Programm mit einem ValueError ab! Prüfe vorher immer mit if "Etwas" in liste:.

Statistik & Rechnen mit Listen

noten = [1.0, 2.3, 1.7, 3.0]

print(len(noten))   # -> 4 (Anzahl der Elemente)
print(min(noten))   # -> 1.0 (kleinste Zahl / beste Note)
print(max(noten))   # -> 3.0 (größte Zahl / schlechteste Note)
print(sum(noten))   # -> 8.0 (Summe)
schnitt = sum(noten) / len(noten)  # -> 2.0 (Durchschnitt)

4. 🎯 Deine Aufgaben in aufgabe.py

Öffne die Datei aufgabe.py und löse die 5 TODOs:

💡 Lösungshinweise (Aufklappen bei Bedarf)

🔍 Tipp zu TODO 3 (Element sicher entfernen)
def entferne_element(liste, element):
    if element in liste:
        liste.remove(element)
        return True
    return False
🔍 Tipp zu TODO 5 (Notenschnitt ohne Ausreißer)
def noten_durchschnitt_ohne_ausreisser(noten):
    if len(noten) < 3:
        return 0.0
    kopie = list(noten)
    kopie.remove(min(kopie))
    kopie.remove(max(kopie))
    return sum(kopie) / len(kopie)

5. 🧪 Lösung überprüfen

Führe im Terminal folgenden Befehl aus:

Terminal
python3 test_aufgabe.py