Tupel¶
Tupel ähneln Listen, können jedoch nicht geändert sondern nur erstellt werden. Tupel haben die wichtige Aufgabe, effizient z.B. Schlüssel für Dictionaries zu erstellen.
Tupel werden ähnlich wie die Listen erstellt: einer Variablen wird eine Folge von Werten zugewiesen, die jedoch nicht in eckige sondern in runde Klammern eingeschlossen werden:
>>> x = (1, "2.", 3.0, ["4a", "4b"], (5.1, 5.2))
Diese Zeile erzeugt ein Tupel mit fünf Elementen. Nachdem ein Tupel erstellt wurde, kann es ähnlich wie die eine Liste verwendet werden:
>>> x[1]
'2.'
>>> x[1:]
('2.', 3.0, ['4a', '4b'], (5.1, 5.2))
>>> len(x)
5
>>> max(x[:3:2])
3.0
>>> min(x[:3:2])
1
>>> 1 in x
True
>>> 5.1 not in x
True
Die Operatoren (in, not in, +
und *
) und die
eingebauten Funktionen (len
, max
und min
) arbeiten mit Tupeln auf
die gleiche Weise wie mit Listen, da keine dieser Funktionen das Original
verändert. Es gibt jedoch nur zwei Tupelmethoden: count
und index
.
Mit den +
- und *
-Operatoren könnt ihr Tupel aus bestehenden Tupeln
erstellen:
>>> x + x
(1, '2.', 3.0, ['4a', '4b'], (5.1, 5.2), 1, '2.', 3.0, ['4a', '4b'], (5.1, 5.2))
>>> 2 * x
(1, '2.', 3.0, ['4a', '4b'], (5.1, 5.2), 1, '2.', 3.0, ['4a', '4b'], (5.1, 5.2))
Eine Kopie eines Tupels kann auf die gleiche Weise wie bei Listen erstellt werden:
>>> x[:]
(1, '2.', 3.0, ['4a', '4b'], (5.1, 5.2))
>>> x * 1
(1, '2.', 3.0, ['4a', '4b'], (5.1, 5.2))
>>> x + ()
(1, '2.', 3.0, ['4a', '4b'], (5.1, 5.2))
Der Versuch, ein Tupel zu ändern, führt jedoch zu einer Fehlermeldung:
>>> x[1] = "zweitens"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Ein-Element-Tupel¶
Einen kleinen syntaktischen Unterschied gibt es jedoch zu Listen: während
[1]
eine Liste mit einem Element erstellt, ist (1)
eine Ganzzahl und
kein Tupel. Der Hintergrund hierfür ist, dass runde Klammern auch dazu verwendet
werden, Elemente in Ausdrücken zu gruppieren, um eine bestimmte
Auswertungsreihenfolge zu erzwingen. Daher enthält jedes Tupel mit einem oder
mehr Elementen ein oder mehr Kommas:
>>> y = ()
>>> type(y)
<class 'tuple'>
>>> z = (1 + 3.0)
>>> type(z)
<class 'float'>
>>> z = (1 + 3.0,)
>>> type(z)
<class 'tuple'>
Packen und Entpacken von Tupeln¶
Tupel können auf der linken Seite eines Zuweisungsoperators erscheinen. In diesem Fall erhalten die Variablen im Tupel die entsprechenden Werte aus dem Tupel auf der rechten Seite des Zuweisungsoperators. Hier ist ein einfaches Beispiel:
>>> (v, w, x, y, z) = (1, "2.", 3.0, ["4a", "4b"], (5.1, 5.2))
>>> v
1
>>> w
'2.'
Dieses Beispiel kann noch weiter einfacht werden, da Python Tupel in einem Zuweisungskontext auch ohne die runden Klammern erkennt:
>>> v, w, x, y, z = 1, "2.", 3.0, ["4a", "4b"], (5.1, 5.2)
>>> y
['4a', '4b']
>>> z
(5.1, 5.2)
Mit *
wird das Entpacken noch erweitert um eine beliebige Anzahl von
Elementen aufzunehmen, die nicht zu den sonstigen Elementen passen:
>>> x = (1, "2.", 3.0, ["4a", "4b"], (5.1, 5.2))
>>> a, b, *c = x
>>> a, b, c
(1, '2.', [3.0, ['4a', '4b'], (5.1, 5.2)])
>>> a, *b, c = x
>>> a, b, c
(1, ['2.', 3.0, ['4a', '4b']], (5.1, 5.2))
>>> a, *b, c, d, e, f = x
>>> a, b, c, d, e, f
(1, [], '2.', 3.0, ['4a', '4b'], (5.1, 5.2))
Bemerkung
Das mit *
versehene Element erhält alle überzähligen Elemente als Liste
und, wenn keine überzähligen Elemente vorhanden sind, eine leere Liste.
Konvertieren zwischen Listen und Tupeln¶
Eine Liste kann mit Hilfe der eingebauten Funktion tuple
in ein Tupel
umgewandelt werden:
>>> x = [1, 2, 3, 5]
>>> tuple(x)
(1, 2, 3, 5)
Umgekehrt kann ein Tupel mit Hilfe der eingebauten Funktion list in eine Liste umgewandelt werden:
>>> x = (1, 2, 3, 4)
>>> list(x)
[1, 2, 3, 4]
Die Vorteile von Tupeln gegenüber Listen sind:
Tupel sind schneller als Listen.
Wenn ihr eine konstante Menge von Werten definieren und diese nur durchlaufen wollt, solltet ihr ein Tupel anstelle einer Liste verwenden.
Tupel können nicht verändert werden und sind daher schreibgeschützt.
Tupel können als Schlüssel in Dictionaries und Werte in Sets verwendet werden.
Zusammenfassung¶
Datentyp |
veränderlich |
geordnet |
indiziert |
Duplikate |
---|---|---|---|---|
Tuple |
❌ |
✅ |
✅ |
✅ |
Checks¶
Erläutert, warum die folgenden Operationen nicht auf das Tuple
t
angewendet werden können:t.append(1)
t[2] = 2
del t[3]
Wie könnt ihr die Elemente eines Tuple sortieren?