Direkt zum Hauptinhalt springen
eLearner.app
Modul 3 · Lektion 2 von 410/36 im Kurs~10 min
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

Python
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 set verwenden 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

Python
nome, anni = ("Ada", 36)
nome   # 'Ada'
anni   # 36

Es funktioniert auch ohne Klammern (das Komma definiert das Tupel):

Python
x, y = 10, 20

Und es ermöglicht das Vertauschen von Werten ohne temporäre Variable, ein reines Python-Muster:

Python
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:

Python
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.

Python
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

Übung#python.m3.l2.e1
Versuche: 0Wird geladen…

Gegeben seien `a = 1` und `b = 2`. Vertausche ihre Werte in einer einzigen Zeile (Tupel-Entpacken) und evaluiere das Tupel (a, b).

Editor wird geladen…
Hinweis anzeigen

a, b = b, a

Lösung nach 3 Versuchen verfügbar

Wiederholungsübung

Übung#python.m3.l2.e2
Versuche: 0Wird geladen…

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)`.

Editor wird geladen…
Hinweis anzeigen

primo, *centro, ultimo = voti → primo=7, centro=[5,8,6], ultimo=9.

Lösung nach 3 Versuchen verfügbar

Zusätzliche Herausforderung

Übung#python.m3.l2.e3
Versuche: 0Wird geladen…

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`.

Editor wird geladen…
Hinweis anzeigen

Verwende x, y, z = point, um die drei Koordinaten in einer einzigen Anweisung zu extrahieren.

Lösung nach 3 Versuchen verfügbar