Python-Sammlungsmodul: Erweiterte Containertypen

Erfahren Sie, wie Sie das Sammlungsmodul von Python verwenden. Master Counter, Defaultdict, NamedTuple, Deque und wie man komplexe Datenstrukturen vereinfacht.

Versuchen Sie es im Editor

Übersicht

Während die grundlegenden Container von Python – Listen, Wörterbücher, Mengen und Tupel – für die meisten Aufgaben ausreichen, erfordern komplexe Programme häufig spezielle Datenstrukturen. Um dieses Problem zu beheben, stellt Python das integrierte Modul „Sammlungen“ bereit. Dieses Modul enthält leistungsstarke Container-Datentypen, die darauf ausgelegt sind, gängige Programmieraufgaben effizienter und mit einer saubereren, selbstdokumentierenden Syntax zu lösen.

Zu den nützlichsten Klassen gehört „defaultdict“, das sich wie ein normales Wörterbuch verhält, fehlende Schlüssel jedoch automatisch mit einem Standardwert (wie einer leeren Liste oder einer Ganzzahl Null) initialisiert, wodurch ausführliche Schlüsselprüfungen überflüssig werden. Ein weiteres Kraftpaket ist die Klasse „Counter“, die speziell für die Zählung des Vorkommens von Elementen in einem Iterable optimiert ist. Für schnelle Warteschlangen und Stapel bietet „deque“ (doppelendige Warteschlange) „O(1)“-Einfügungen und Löschungen an beiden Enden, im Gegensatz zu Listen, die unter „O(N)“-Verschiebungen leiden.

Schließlich bietet das Modul „namedtuple“, das leichte, tupelartige Objekte erstellt, auf die sowohl mit Punktnotation als auch mit herkömmlichen Indizes zugegriffen werden kann (z. B. „point.x“ anstelle von „point[0]“). Dadurch erhalten Sie die Geschwindigkeit und Unveränderlichkeit eines Tupels mit der Lesbarkeit einer Klasse. Durch die Integration des Sammlungsmoduls in Ihren Workflow wird sichergestellt, dass Ihr Code elegant, leistungsfähig und sauber bleibt.

Code- und Ausführungsausgabe

Zählen Sie Wörter mit Counter und organisieren Sie Wörterbuchgruppen mit defaultdict.

collections_demo.py
Versuchen Sie es im Editor
from collections import Counter, defaultdict, namedtuple

# 1. Counter: Tallying items
votes = ["yes", "no", "yes", "yes", "no"]
vote_counts = Counter(votes)
print(f"Vote Counts: {vote_counts}")
print(f"Most common: {vote_counts.most_common(1)}")

# 2. defaultdict: Grouping values
grouped_data = defaultdict(list)
grouped_data["engineers"].append("Alice")
grouped_data["engineers"].append("Bob")
print(f"Grouped Data: {dict(grouped_data)}")

# 3. namedtuple: Clean records
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(f"Point x: {p.x}, Point y: {p.y}")
Terminal-Ausgabe
Vote Counts: Counter({'yes': 3, 'no': 2})
Most common: [('yes', 3)]
Grouped Data: {'engineers': ['Alice', 'Bob']}
Point x: 10, Point y: 20

Schrittweise Umsetzung

  • Analysieren Sie Protokolldateien, um Fehlerereignisse mithilfe eines Zählers zu zählen
  • Erstellen von Prioritätswarteschlangen oder Aufgabenplanern mithilfe von Deque
  • Darstellung von Koordinatendimensionen oder Datensätzen mithilfe eines benannten Tupels

Häufig gestellte Fragen

Warum ist deque für Warteschlangenoperationen schneller als list?

Eine Liste erfordert das Verschieben aller nachfolgenden Elemente im Speicher, wenn sie von vorne eingefügt oder gelöscht werden (O(N)). Eine Deque wird als doppelt verknüpfte Liste implementiert, die O(1)-Operationen an beiden Enden ermöglicht.

Kann ich Elemente eines benannten Tupels ändern?

Nein. Da benannte Tupel von Standardtupeln erben, sind sie vollständig unveränderlich. Sie müssen die Methode ._replace() verwenden, um eine neue geänderte Instanz zurückzugeben.

Verwandte Themen

Empfohlene Python-Ressourcen

Erweitern Sie Ihr Wissen mit zugehörigen interaktiven Tutorials, Spickzetteln und Codevergleichen.