0%

Kapitel 3

Daten umformen und verbinden

Lerne Tupel kennen

Kapitel 2 hat sich darauf konzentriert, Funktionen klar verwendbar zu machen. Dieses Kapitel folgt den Daten, die durch diese Funktionen fließen: wie du zusammengehörige Werte aufteilst, Sammlungen verbindest, Datensätze ordnest und Zusammenfassungen berechnest.

Du kennst bereits Listen und Dictionarys. Python hat eine weitere Sammlung für eine kleine Gruppe zusammengehöriger Werte: ein Tupel.

Schreibe ein Tupel

Meistens schreibst du die Elemente in runde Klammern und trennst sie durch Kommas:

Try it

Python meldet den Typ als tuple. Dieses Tupel enthält drei Elemente: den Namen einer lernenden Person, eine Punktzahl und eine Gesamtzahl. Tupelelemente können unterschiedliche Typen haben, sodass Strings und ganze Zahlen zusammen vorkommen können.

Die Kommas erzeugen das Tupel

Die Klammern machen ein Tupel leicht erkennbar. Tatsächlich erzeugen aber die Kommas das Tupel. An vielen Stellen sind die Klammern optional:

Try it

Python behandelt point als das Tupel (10, 2).

Dieselbe Regel gilt, wenn eine Funktion durch Kommas getrennte Werte zurückgibt:

def position():
    x = 10
    y = 2
    return x, y

return x, y gibt einen Wert zurück: das Tupel (10, 2).

Klammern sind dennoch hilfreich. Deshalb enthält dieser Kurs sie normalerweise, wenn ein Tupel direkt erstellt wird. Sie machen Anfang und Ende der Gruppe deutlich.

Bei einem Tupel mit einem Element wird das Komma besonders wichtig:

one_number = (10,)
not_a_tuple = (10)

one_number ist wegen des Kommas ein Tupel. not_a_tuple ist nur die ganze Zahl 10 in gruppierenden Klammern.

Wie eine Liste behält ein Tupel die Reihenfolge seiner Elemente bei. Index 0 verweist auf das erste Element:

result = ("Mina", 8, 10)

print(result[0])
print(result[1])
print(len(result))

Das gibt den Namen der lernenden Person, die Punktzahl und die Anzahl der Elemente aus.

Verwende ein Tupel für eine feste Gruppe

Eine Liste ist nützlich, wenn du möglicherweise Elemente hinzufügst, entfernst oder ersetzt. Ein Tupel ist unveränderbar. Das bedeutet, dass seine Elemente nach dem Erstellen des Tupels nicht ersetzt werden können.

Zum Beispiel ist diese Zuweisung nicht erlaubt:

result[1] = 9

Python löst einen TypeError aus, weil result ein Tupel ist. Um ein anderes Ergebnis darzustellen, erstelle ein neues Tupel:

updated_result = ("Mina", 9, 10)

Dieser feste Aufbau macht ein Tupel nützlich für eine kleine Gruppe, deren Positionen eine vereinbarte Bedeutung haben:

coordinates = (4, 7)
color = (120, 80, 200)
result = ("Mina", 8, 10)

Ersetze nicht jede Liste oder jedes Dictionary durch ein Tupel. Verwende eine Liste für eine Sammlung, die wächst oder sich verändert. Verwende ein Dictionary, wenn Bezeichnungen wie "learner" und "score" sichtbar bleiben müssen. Ein Tupel ist am nützlichsten, wenn die Gruppe klein, geordnet und fest ist.

Eine Funktion kann ein Tupel zurückgeben

Eine Funktion gibt jeweils immer einen Wert zurück. Dieser Wert kann selbst ein Tupel mit mehreren zusammengehörigen Elementen sein. Hier machen Klammern die zurückgegebene Gruppe gut sichtbar:

def result_values(attempt):
    return (
        attempt["learner"],
        attempt["score"],
        attempt["total"],
    )

Eine Variable kann das zurückgegebene Tupel erhalten:

attempt = {"learner": "Mina", "score": 8, "total": 10}
result = result_values(attempt)

result verweist jetzt auf ein Tupel mit drei Elementen.

Wie das frühere Beispiel position gezeigt hat, könnte die Funktion die Klammern weglassen und direkt durch Kommas getrennte Werte zurückgeben. Das Ergebnis wäre weiterhin ein Tupel.

Welcher Wert ist ein Tupel mit einer lernenden Person, einer Punktzahl und einer Gesamtzahl?

Erkunde ein Tupel in der REPL

Erstelle mit der REPL neben der Lektion result = ("Mina", 8, 10). Gib dann result, type(result), len(result) und jedes seiner drei Elemente über den jeweiligen Index nacheinander ein.

Die nächste Lektion behält dasselbe Ergebnistupel bei, gibt seinen Positionen aber beschreibende Namen, statt wiederholt result[0], result[1] und result[2] zu verwenden.