Wähle die Struktur, die zu jedem Bedarf passt: unveränderliche Tupel, Sets für Zugehörigkeitstests in O(1), Counter und defaultdict für wiederkehrende Muster.
Diese Lektion in Kodokon öffnenDie richtige Datenstruktur zu wählen regelt Lesbarkeit und Performance in einem Zug. Das Tupel ist eine unveränderliche Sequenz: ideal für einen heterogenen Datensatz fester Größe (Koordinaten, ein Schlüssel-Wert-Paar). Unveränderlich bedeutet hashbar (sofern es sein Inhalt ist): Ein Tupel kann daher als Dictionary-Schlüssel oder Set-Element dienen, was eine Liste nicht kann. Unpacking macht Code ausdrucksstark - und eine Funktion, die "mehrere Werte zurückgibt", gibt in Wirklichkeit ein Tupel zurück.
point = (48.85, 2.35)
lat, lon = point
def min_max(values):
return min(values), max(values)
low, high = min_max([3, 1, 4, 1, 5])
print(low, high)
distances = {("paris", "lyon"): 465}
print(distances[("paris", "lyon")])Das Set garantiert Eindeutigkeit und bietet einen Zugehörigkeitstest in im Schnitt O(1), wo eine Liste O(n) braucht. In einer Schleife, die tausendfach x in collection prüft, zeigt sich der Unterschied sofort. Set-Operatoren (& Schnittmenge, - Differenz, | Vereinigung) sind ein echter Fortschritt gegenüber verschachtelten Schleifen: Zwei Listen von Bezeichnern zu vergleichen - wer verschwunden ist, wer neu ist - passt in zwei Zeilen.
active = {"ada", "linus", "guido"}
banned = {"linus", "mallory"}
print(active & banned)
print(active - banned)
print(active | banned)
emails = ["a@x.io", "b@x.io", "a@x.io"]
unique = set(emails)
print(len(unique))Das Modul collections deckt zwei alltägliche Bedürfnisse ab. Counter zählt die Vorkommen in einem Iterable und stellt most_common(n) bereit - Schluss mit von Hand geschriebenen Zähl-Dictionaries. defaultdict(factory) baut den fehlenden Wert im Flug: defaultdict(list) ist das kanonische Werkzeug, um Elemente nach Schlüssel zu gruppieren, ohne bei jedem Schleifendurchlauf die Existenz des Schlüssels zu prüfen.
from collections import Counter, defaultdict
words = ["go", "py", "go", "rs", "go"]
counts = Counter(words)
print(counts.most_common(2))
groups = defaultdict(list)
pairs = [("fr", "Ada"), ("us", "Lin"), ("fr", "Zoe")]
for country, name in pairs:
groups[country].append(name)
print(dict(groups))