Eine feste Gruppe von Werten
Ein Tupel ist wie eine Liste, die sich nach dem Erstellen nicht mehr ändern lässt. Man bildet es mit Kommas, meist in Klammern: ("AAPL", 184.25, 184.5). Es passt zu einem kleinen Datensatz, dessen Teile eine feste Bedeutung haben, etwa ein Kurs oder ein Trade. Gelesen wird es per Index wie eine Liste, aber eine Zuweisung an eine Position löst einen TypeError aus. Ein Tupel mit einem Element braucht ein Komma am Ende, (5,), denn (5) ist nur die Zahl 5.
quote = ("AAPL", 184.25, 184.5)
# Reading works like a list
print(quote[0], len(quote)) # AAPL 3
# Changing does not
try:
quote[1] = 185.0
except TypeError as error:
print("tuples are fixed:", error)
# One item needs a trailing comma
print(type((5,)), type((5))) # <class 'tuple'> <class 'int'>Entpacken: jedem Teil einen Namen geben
Beim Entpacken werden die Teile eines Tupels (oder jeder Sequenz) auf einmal mehreren Namen zugewiesen: symbol, bid, ask = quote. Die Zahl der Namen muss zur Zahl der Elemente passen, sonst löst Python einen ValueError aus. Gegenüber quote[0], quote[1] und quote[2] sagen die Namen, was jeder Teil bedeutet; Entpacken ist daher meist klarer als Indizieren. Es liefert auch den klassischen Tausch ohne Hilfsvariable: a, b = b, a.
# Unpack a quote into named parts
quote = ("AAPL", 184.25, 184.5)
symbol, bid, ask = quote
print(symbol, round(ask - bid, 2)) # AAPL 0.25
# Swap two values without a temporary
bid, ask = ask, bid
print(bid, ask) # 184.5 184.25
# The count must match
try:
symbol, bid = quote
except ValueError as error:
print("wrong count:", error)Den Rest mit * nehmen
Setzen Sie ein * vor einen Namen, damit er alles Übrige als Liste aufnimmt: first, *rest = prices oder first, *middle, last = prices. Nur ein Name mit Stern ist erlaubt, und die einfachen Namen brauchen je ein Element. Verwenden Sie _ für einen Teil, den Sie nicht brauchen, etwa first, *_, last = prices.
# * collects what is left, as a list
prices = [184.0, 185.0, 183.2, 186.1]
first, *rest = prices
print(first, rest) # 184.0 [185.0, 183.2, 186.1]
first, *_, last = prices
print(first, last) # 184.0 186.1Entpacken in Schleifen, Rückgaben und Sortierung
Das Entpacken funktioniert überall, wo ein Name zugewiesen wird: in einer for-Schleife (for symbol, price in quotes), in Comprehensions und beim Ergebnis einer Funktion, die mit return a, b mehrere Werte liefert, was in Wirklichkeit ein einziges Tupel ist. Tupel werden auch Element für Element verglichen, erstes gegen erstes und bei Gleichstand zweites gegen zweites; eine Liste von (price, symbol)-Tupeln wird so nach Preis sortiert, Gleichstände entscheidet das Symbol.
# Return several values, unpack them in the caller
def spread_and_mid(bid, ask):
return ask - bid, (bid + ask) / 2
spread, mid = spread_and_mid(184.25, 184.5)
print(spread, mid) # 0.25 184.375
# Tuples sort by the first item, then the second
quotes = [("AAPL", 184.5), ("MSFT", 410.2), ("GOOG", 171.0)]
by_price = sorted((price, symbol) for symbol, price in quotes)
print(by_price) # [(171.0, 'GOOG'), (184.5, 'AAPL'), (410.2, 'MSFT')]
for price, symbol in by_price:
print(symbol, price)(symbol, bid, ask). Verwenden Sie eine Liste für viele ähnliche Elemente, von denen Sie welche hinzufügen oder entfernen können. Da ein Tupel sich nicht ändert, geht es auch dort, wo eine Liste nicht geht, etwa als Schlüssel in einem Dictionary, das bald folgt.(a, b, c): eine feste Gruppe; lesen ja, ändern nein.x, y = pair: in Namen entpacken; die Anzahlen müssen passen.first, *rest = items: der Name mit Stern nimmt den Rest als Liste auf.
Als Nächstes: Dictionaries, die Werte über einen Namen statt über eine Position nachschlagen.
Lab: Was bewertet wird
- Mit
quote_statseinen Kurs entpacken25 Pkt. - Mit
first_lastbeide Enden nehmen25 Pkt. - Mit
rankedKurse nach Preis ordnen25 Pkt. - Mit
best_askden günstigsten Handelsplatz finden25 Pkt.