Python Crash Course

Kapitel 3

Einführung in Listen

Listen erstellen, ändern und organisieren

Was sind Listen?

  • Sammlung von Elementen in einer bestimmten Reihenfolge
  • Können verschiedene Datentypen enthalten
  • Z.B. Strings, Integers, Floats etc.
  • Sind veränderbar (mutable)
  • Werden mit eckigen Klammern [] definiert
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)

Ausgabe:

['trek', 'cannondale', 'redline', 'specialized']

Zugriff auf Listenelemente

Mit Index in eckigen Klammern

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0])
print(bicycles[0].title())

Ausgabe:

trek
Trek

Index-Positionen

Listen sind 0-indexiert!

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[1])
print(bicycles[3])

Ausgabe:

cannondale
specialized

Negativer Index

-1 gibt das letzte Element zurück

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[-1])
print(bicycles[-2])

Ausgabe:

specialized
redline

Einzelne Werte aus Listen verwenden

bicycles = ['trek', 'cannondale', 'redline', 'specialized']
message = f"My first bicycle was a {bicycles[0].title()}."
print(message)

Ausgabe:

My first bicycle was a Trek.

🛠️ Übung 1: Namen und Grüße

🔗 jupyter.gymnasium-hummelsbuettel.de

Aufgaben 3-1 bis 3-3:

  • Namen
  • Grüße
  • Ihre eigene Liste

→ kapitel_3_aufgaben_3-1_3-3.ipynb

↓ Lösungen

💡 Lösung 3-1

names = ['gödel', 'escher', 'bach']
print(names[0].title())
print(names[1].title())
print(names[2].title())

📄 Ausgabe 3-1

Gödel
Escher
Bach

💡 Lösung 3-2

names = ['gödel', 'escher', 'bach']
print(f"Hallo, Herr {names[0].title()}! Wie geht es Ihnen?")
print(f"Hallo, Herr {names[1].title()}! Wie geht es Ihnen?")
print(f"Hallo, Herr {names[2].title()}! Wie geht es Ihnen?")

📄 Ausgabe 3-2

Hallo, Herr Gödel! Wie geht es Ihnen?
Hallo, Herr Escher! Wie geht es Ihnen?
Hallo, Herr Bach! Wie geht es Ihnen?

💡 Lösung 3-3

books = ['PAIP', 'SICP', 'GEB']
print(f"I would like to own the book: '{books[0]}'.")
print(f"I would like to own the book: '{books[1]}'.")
print(f"I would like to own the book: '{books[2]}'.")

📄 Ausgabe 3-3

I would like to own the book: 'PAIP'.
I would like to own the book: 'SICP'.
I would like to own the book: 'GEB'.

Listen sind veränderbar

Die meisten Listen werden sich während der Programmausführung ändern

  • Elemente ändern
  • Neue Elemente hinzufügen
  • Elemente entfernen

Elemente ändern

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

motorcycles[0] = 'ducati'
print(motorcycles)

Ausgabe:

['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']

Elemente hinzufügen: append()

Fügt Element am Ende der Liste hinzu

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

motorcycles.append('ducati')
print(motorcycles)

Ausgabe:

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']

Listen dynamisch aufbauen

motorcycles = []

motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')

print(motorcycles)

Ausgabe:

['honda', 'yamaha', 'suzuki']

Elemente einfügen: insert()

Fügt Element an beliebiger Position ein

motorcycles = ['honda', 'yamaha', 'suzuki']

motorcycles.insert(0, 'ducati')
print(motorcycles)

Ausgabe:

['ducati', 'honda', 'yamaha', 'suzuki']

Elemente entfernen: del

Löscht Element an bekannter Position

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

del motorcycles[0]
print(motorcycles)

Ausgabe:

['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']

Elemente entfernen: pop()

Entfernt und gibt letztes Element zurück

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)

popped_motorcycle = motorcycles.pop()
print(motorcycles)
print(popped_motorcycle)

Ausgabe:

['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki

pop() verwenden

motorcycles = ['honda', 'yamaha', 'suzuki']
last_owned = motorcycles.pop()
print(f"The last motorcycle I owned was a {last_owned.title()}.")

Ausgabe:

The last motorcycle I owned was a Suzuki.

pop() mit Index

Entfernt Element an beliebiger Position

motorcycles = ['honda', 'yamaha', 'suzuki']

first_owned = motorcycles.pop(0)
print(f"The first motorcycle I owned was a {first_owned.title()}.")

Ausgabe:

The first motorcycle I owned was a Honda.

Elemente nach Wert entfernen: remove()

motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)

motorcycles.remove('ducati')
print(motorcycles)

Ausgabe:

['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']

remove() mit Variable

motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']

too_expensive = 'ducati'
motorcycles.remove(too_expensive)
print(motorcycles)
print(f"\nA {too_expensive.title()} is too expensive for me.")

Ausgabe:

['honda', 'yamaha', 'suzuki']

A Ducati is too expensive for me.

🛠️ Übung 2: Gästeliste

🔗 jupyter.gymnasium-hummelsbuettel.de

Aufgaben 3-4 bis 3-7:

  • Gästeliste
  • Gästeliste ändern
  • Weitere Gäste
  • Die Gästeliste verkleinern

→ kapitel_3_aufgaben_3-4_3-7.ipynb

↓ Lösungen

💡 Lösung 3-4

abendessen = ["Helmut Schmidt", "Buddha", "Julius Caesar"]
print(f"Ich möchte dich gerne zum Essen einladen, {abendessen[0]}.")
print(f"Ich möchte dich gerne zum Essen einladen, {abendessen[1]}.")
print(f"Ich möchte dich gerne zum Essen einladen, {abendessen[2]}.")

📄 Ausgabe 3-4

Ich möchte dich gerne zum Essen einladen, Helmut Schmidt.
Ich möchte dich gerne zum Essen einladen, Buddha.
Ich möchte dich gerne zum Essen einladen, Julius Caesar.

💡 Lösung 3-5

abendessen = ["Helmut Schmidt", "Buddha", "Julius Caesar"]
print(f"{abendessen[1]} kann nicht kommen.")

abendessen[1] = "Napoleon"
print(f"Ich lade dich zum Essen ein, {abendessen[0]}.")
print(f"Ich lade dich zum Essen ein, {abendessen[1]}.")
print(f"Ich lade dich zum Essen ein, {abendessen[2]}.")

📄 Ausgabe 3-5

Buddha kann nicht kommen.
Ich lade dich zum Essen ein, Helmut Schmidt.
Ich lade dich zum Essen ein, Napoleon.
Ich lade dich zum Essen ein, Julius Caesar.

💡 Lösung 3-6

abendessen = ["Helmut Schmidt", "Napoleon", "Julius Caesar"]
print("Ich habe einen größeren Tisch gefunden!")

abendessen.insert(0, "Hindenburg")
abendessen.insert(2, "Kennedy")
abendessen.append("Lincoln")

for gast in abendessen:
    print(f"Ich lade dich zum Essen ein, {gast}.")

📄 Ausgabe 3-6

Ich habe einen größeren Tisch gefunden!
Ich lade dich zum Essen ein, Hindenburg.
Ich lade dich zum Essen ein, Helmut Schmidt.
Ich lade dich zum Essen ein, Kennedy.
Ich lade dich zum Essen ein, Napoleon.
Ich lade dich zum Essen ein, Julius Caesar.
Ich lade dich zum Essen ein, Lincoln.

💡 Lösung 3-7

abendessen = ['Hindenburg', 'Helmut Schmidt', 'Kennedy',
              'Napoleon', 'Julius Caesar', 'Lincoln']
print("Ich kann leider nur zwei Personen einladen.")

while len(abendessen) > 2:
    entfernt = abendessen.pop()
    print(f"Es tut mir leid, {entfernt}, ich kann dich nicht einladen.")

for gast in abendessen:
    print(f"{gast}, du bist noch eingeladen.")

del abendessen[0]
del abendessen[0]
print(abendessen)

📄 Ausgabe 3-7

Ich kann leider nur zwei Personen einladen.
Es tut mir leid, Lincoln, ich kann dich nicht einladen.
Es tut mir leid, Julius Caesar, ich kann dich nicht einladen.
Es tut mir leid, Napoleon, ich kann dich nicht einladen.
Es tut mir leid, Kennedy, ich kann dich nicht einladen.
Hindenburg, du bist noch eingeladen.
Helmut Schmidt, du bist noch eingeladen.
[]

Listen organisieren

Oft möchte man Listen in einer bestimmten Reihenfolge präsentieren

  • Alphabetisch sortieren
  • Chronologisch ordnen
  • Nach Größe sortieren

Permanent sortieren: sort()

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort()
print(cars)

Ausgabe:

['audi', 'bmw', 'subaru', 'toyota']

Die Sortierung ist permanent!

Rückwärts sortieren

cars = ['bmw', 'audi', 'toyota', 'subaru']
cars.sort(reverse=True)
print(cars)

Ausgabe:

['toyota', 'subaru', 'bmw', 'audi']

Temporär sortieren: sorted()

cars = ['bmw', 'audi', 'toyota', 'subaru']

print("Here is the original list:")
print(cars)

print("\nHere is the sorted list:")
print(sorted(cars))

print("\nHere is the original list again:")
print(cars)

sorted() Ausgabe

Here is the original list:
['bmw', 'audi', 'toyota', 'subaru']

Here is the sorted list:
['audi', 'bmw', 'subaru', 'toyota']

Here is the original list again:
['bmw', 'audi', 'toyota', 'subaru']

Listen umkehren: reverse()

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(cars)

cars.reverse()
print(cars)

Ausgabe:

['bmw', 'audi', 'toyota', 'subaru']
['subaru', 'toyota', 'audi', 'bmw']

Kehrt die Reihenfolge um (nicht alphabetisch!)

Länge einer Liste: len()

cars = ['bmw', 'audi', 'toyota', 'subaru']
print(len(cars))

Ausgabe:

4

Nützlich für Schleifen und Bedingungen

🛠️ Übung 3: Listen ordnen

🔗 jupyter.gymnasium-hummelsbuettel.de

Aufgaben 3-8 bis 3-10:

  • Die Welt sehen
  • Dinnerparty
  • Alle Funktionen

→ kapitel_3_aufgaben_3-8_3-10.ipynb

↓ Lösungen

💡 Lösung 3-8

orte = ['Tokyo', 'New York', 'Paris', 'Sydney', 'Cairo']
print("Original:", orte)
print("Sortiert:", sorted(orte))
print("Original:", orte)
print("Rückwärts:", sorted(orte, reverse=True))
print("Original:", orte)

orte.reverse()
print("Nach reverse():", orte)
orte.reverse()
print("Wieder original:", orte)

orte.sort()
print("Permanent sortiert:", orte)
orte.sort(reverse=True)
print("Rückwärts sortiert:", orte)

📄 Ausgabe 3-8

Original: ['Tokyo', 'New York', 'Paris', 'Sydney', 'Cairo']
Sortiert: ['Cairo', 'New York', 'Paris', 'Sydney', 'Tokyo']
Original: ['Tokyo', 'New York', 'Paris', 'Sydney', 'Cairo']
Rückwärts: ['Tokyo', 'Sydney', 'Paris', 'New York', 'Cairo']
Original: ['Tokyo', 'New York', 'Paris', 'Sydney', 'Cairo']
Nach reverse(): ['Cairo', 'Sydney', 'Paris', 'New York', 'Tokyo']
Wieder original: ['Tokyo', 'New York', 'Paris', 'Sydney', 'Cairo']
Permanent sortiert: ['Cairo', 'New York', 'Paris', 'Sydney', 'Tokyo']
Rückwärts sortiert: ['Tokyo', 'Sydney', 'Paris', 'New York', 'Cairo']

💡 Lösung 3-9

abendessen = ["Helmut Schmidt", "Buddha", "Julius Caesar"]
print(f"Ich lade {len(abendessen)} Personen zum Essen ein.")

📄 Ausgabe 3-9

Ich lade 3 Personen zum Essen ein.

💡 Lösung 3-10

sprachen = ['Python', 'JavaScript', 'C++', 'Ruby', 'Go']
print(f"Anzahl: {len(sprachen)}")
print(f"Erste: {sprachen[0]}")
print(f"Letzte: {sprachen[-1]}")

sprachen.append('Rust')
sprachen.insert(1, 'Java')
entfernt = sprachen.pop()
print(f"Entfernt: {entfernt}")

del sprachen[0]
sprachen.remove('C++')
sprachen.sort()
print(f"Sortiert: {sprachen}")

📄 Ausgabe 3-10

Anzahl: 5
Erste: Python
Letzte: Go
Entfernt: Rust
Sortiert: ['Go', 'Java', 'JavaScript', 'Ruby']

IndexError vermeiden

motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles[3])  # IndexError!

Fehler:

IndexError: list index out of range

Tipp: Verwende -1 für das letzte Element!

🛠️ Übung 4: IndexError verstehen

🔗 jupyter.gymnasium-hummelsbuettel.de

Aufgabe 3-11:

  • Absichtlicher IndexError
  • Fehler korrigieren

→ kapitel_3_aufgaben_3-11.ipynb

↓ Lösungen

💡 Lösung 3-11

# Absichtlicher IndexError
motorcycles = ['honda', 'yamaha', 'suzuki']
# print(motorcycles[3])  # IndexError!

# Korrigiert - letztes Element
print(motorcycles[-1])  # Funktioniert immer
# oder
print(motorcycles[2])   # Bei bekannter Länge

📄 Ausgabe 3-11

suzuki
suzuki

Zusammenfassung Kapitel 3

  • Listen erstellen: liste = ['a', 'b', 'c']
  • Zugriff: liste[0], liste[-1]
  • Ändern: liste[0] = 'neuer_wert'
  • Hinzufügen: append(), insert()
  • Entfernen: del, pop(), remove()
  • Sortieren: sort(), sorted()
  • Umkehren: reverse()
  • Länge: len()

Fragen?

🐍 Happy Coding!