In diesem Beitrag möchte ich erläutern was ein Tupel in Python ist und was wir damit machen können.
Ein Tupel ist ähnlich einer Liste, jedoch ist dieses Objekt unveränderlich ist, d.h. es kann wenn dieses einmal erzeugt wurde kann es nicht mehr verändert werden.
Wie erzeugen wir ein Tupel?
Ein Tupel wird erzeugt in dem wir mit einer runden Klammer beginnen und die Werte darin Kommasepariert aufführen und mit einer runden Klammer schließen.
person = ("Stefan", "Draeger", "38") print(person)
Die Ausgabe ist:
('Stefan', 'Draeger', '38')
Zugriff auf die Elemente in einem Tupel
Um auf die Elemente in einem Tupel zuzugreifen kann man sich der bekannten Schreibweise von der Liste behelfen.
person = ("Stefan", "Draeger", "38") print(person[0])
Was man jedoch nicht machen kann ist, dieses Objekt zu verändern:
person = ("Stefan", "Draeger", "38") person[0] = "Hans" print(person[0])
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-16-571999b190d4> in <module>() 1 person = ("Stefan", "Draeger", "38") ----> 2 person[0] = "Hans" 3 print(person[0]) TypeError: 'tuple' object does not support item assignment
Denn wie eingangs erwähnt, kann man ein Tupel nicht verändern, somit gibt es auch keine Möglichkeit ein Element hinzuzufügen oder aber zu verändern.
Wir müßten nun also ein neues Tupel erzeugen und aus dem “alten” die Daten entnehmen.
Zugriffsmöglichkeit über eine Schleife
Man kann auf die Elemente auch mit einer Schleife zugreifen:
person = ("Stefan", "Draeger", "38") for data in person: print(data)
Nun werden alle Daten in dem Tupel ausgegeben:
Stefan Draeger 38
Entpacken von Tupel
Um an die Daten des Tupels zu gelangen können wir dieses Entpacken.
Dazu bietet uns Python die Möglichkeit an für jeden Wert in dem Tupel eine Variable zuzuweisen, dieses können wir machen da das Tupel unveränderlich ist.
person = ("Stefan", "Draeger", "38") vorname, nachname, alter = person; print(vorname) print(nachname) print(alter)
Wir müssen jedoch genau für jeden Wert eine Variable zuweisen d.h. wir können nicht nur die ersten beiden Werte verarbeiten und den letzten auslassen. Dieses würde uns der Interpreter mit einer Fehlermeldung quitieren.
--------------------------------------------------------------------------- ValueError Traceback (most recent call last) <ipython-input-26-0ff80e8ff04b> in <module>() 1 person = ("Stefan", "Draeger", "38") ----> 2 vorname, nachname = person; 3 print(vorname) 4 print(nachname) ValueError: too many values to unpack (expected 2)
Das Entpacken von Tupeln in Variablen kann man zbsp. nutzen wenn es sich um eine Liste mit Tupeln handelt. In dem Fall kann man sich einige Zeilen Quellcode ersparen und schaft somit übersichtlichen Code.
personen = [ ("Stefan", "Draeger", 38), ("Max", "Mustermann", 12), ("Erika", "Müller", 32), ("David", "Halle", 22) ] for vorname, nachname, alter in personen: print(vorname) print(nachname) print(alter)
Es wird nun unsere Liste durchlaufen und jedes Tupel wird in die Variablen “vorname”, “nachname”, und “alter” entpackt und ausgegeben.
Wie bei den Dictionaries können wir auch Tupel beliebig tief verschachteln und mit Datentypen befüllen.
person = ("Stefan", "Draeger", 38, {"Strasse": "Musterstr.", "Hausnummer": 25, "Postleitzahl":12345, "Ort": "Musterstadt"}) print(person[3].get("Hausnummer"))
Die Ausgabe ist:
25
Wir haben also nun und das Dictionarie an der Position 3 des Tupels geholt und auf diesem mit der Funktion “get” die Hausnummer ausgegeben.