Lektionen des Moduls (2/4)
Tuples und Unpacking
Ein Tupel ist eine geordnete und unveränderliche (immutable) Sequenz: Einmal erstellt, kannst du seine Elemente nicht mehr ändern. Es wird mit Klammern geschrieben (obwohl es eigentlich das Komma ist, welches das Tupel definiert).
Ein Tupel erstellen
vuota = ()
una = (42,) # ACHTUNG: Ohne Komma ist (42) nur die Zahl 42 in Klammern
coords = (10, 20)
mista = ("Ada", 36, True)Indexzugriff und Slicing funktionieren genau wie bei Listen: coords[0],
coords[-1], mista[:2].
Wann man ein Tupel anstelle einer Liste verwendet
- Wenn der Wert eine feste Sammlung darstellt, die sich nicht ändern darf
(Koordinaten, ein Datum als
(Jahr, Monat, Tag), eine Version(1, 2, 3)). - Wenn du den Wert als Dictionary-Schlüssel oder als Element eines
setverwenden musst: Es können nur unveränderliche (hashbare) Objekte verwendet werden. - Wenn du dem Leser des Codes signalisieren willst, dass dieser Wert "eingefroren" ist.
Entpacken (Unpacking): Das Feature, das dein Python-Schreiben verändert
nome, anni = ("Ada", 36)
nome # 'Ada'
anni # 36Es funktioniert auch ohne Klammern (das Komma definiert das Tupel):
x, y = 10, 20Und es ermöglicht das Vertauschen von Werten ohne temporäre Variable, ein reines Python-Muster:
a, b = 1, 2
a, b = b, a
a, b # (2, 1)Entpacken mit * (Rest)
Wenn du "das erste und den Rest" oder "das erste, das letzte und die mittleren" erfassen willst:
primo, *resto = [1, 2, 3, 4, 5]
primo # 1
resto # [2, 3, 4, 5]
primo, *centro, ultimo = [1, 2, 3, 4, 5]
centro # [2, 3, 4]Dies wird als Starred Assignment bezeichnet: Der Stern sammelt alles, was übrig bleibt, in einer Liste.
Die Falle mit einelementigen Tupeln
(42) ist kein Tupel, sondern die Zahl 42 in Klammern. Um ein einelementiges Tupel zu
erstellen, benötigst du das Komma: (42,). Ohne das Komma schlägt jede Operation auf verwirrende Weise fehl.
x = (42)
type(x) # <class 'int'>
x = (42,)
type(x) # <class 'tuple'>Einelementige Tupel
Um ein Tupel zu erstellen, das nur ein Element enthält, reichen Klammern allein nicht aus: Du musst ein nachgestelltes Komma einfügen, zum Beispiel t = (42,). Ohne das Komma behandelt Python die Klammern als einfache mathematische Gruppierung und erstellt eine normale Ganzzahl 42.
Probiere es aus
Gegeben seien `a = 1` und `b = 2`. Vertausche ihre Werte in einer einzigen Zeile (Tupel-Entpacken) und evaluiere das Tupel (a, b).
Hinweis anzeigen
a, b = b, a
Lösung nach 3 Versuchen verfügbar
Wiederholungsübung
Verwende bei der Liste `voti = [7, 5, 8, 6, 9]` das Entpacken, um die erste Note in `primo`, die letzte in `ultimo` und die verbleibenden Noten in `centro` zu extrahieren. Evaluiere `(primo, centro, ultimo)`.
Hinweis anzeigen
primo, *centro, ultimo = voti → primo=7, centro=[5,8,6], ultimo=9.
Lösung nach 3 Versuchen verfügbar
Zusätzliche Herausforderung
Gegeben sei das Tupel `point = (4, 5, 6)`. Verwende das Entpacken, um die drei Werte den Variablen `x`, `y` bzw. `z` zuzuweisen. Berechne dann die Summe von `x`, `y` und `z` und speichere sie in `coord_sum`. Evaluiere schließlich `coord_sum`.
Hinweis anzeigen
Verwende x, y, z = point, um die drei Koordinaten in einer einzigen Anweisung zu extrahieren.
Lösung nach 3 Versuchen verfügbar