collections — Sammlungs- und Containertypen¶
Dieses Modul stellt spezialisierte Container-Datentypen bereit, die die eingebauten Typen list, tuple, dict und set ergänzen: eine doppelseitige Warteschlange (deque), eine Factory für Tupel mit benannten Feldern (namedtuple()) und ein die Reihenfolge bewahrendes Dictionary (OrderedDict).
Klassen¶
- class collections.deque(iterable: Iterable, maxlen: int, flags: int = 0)¶
Deques (doppelseitige Warteschlangen) sind ein listenartiger Container, der das Anhängen und Entfernen von Elementen an beiden Enden der Deque in O(1) unterstützt. Neue Deques werden mit den folgenden Argumenten erstellt:
iterable ist ein Iterable, das zum Befüllen der Deque bei ihrer Erstellung verwendet wird. Es kann ein leeres Tupel oder eine leere Liste sein, um eine zunächst leere Deque zu erstellen.
maxlen muss angegeben werden, und die Deque wird auf diese maximale Länge begrenzt. Sobald die Deque voll ist, verwerfen neu hinzugefügte Elemente jeweils Elemente vom gegenüberliegenden Ende.
Das optionale flags kann den Wert 1 haben, um beim Hinzufügen von Elementen auf Überlauf zu prüfen.
Deque-Objekte unterstützen
bool,len(), Iteration sowie das Laden und Speichern per Indexzugriff. Sie verfügen außerdem über die folgenden Methoden:- append(x: Any) None¶
Fügt x auf der rechten Seite der Deque hinzu. Löst
IndexErroraus, wenn die Überlaufprüfung aktiviert ist und kein Platz mehr in der Warteschlange vorhanden ist.
- appendleft(x: Any) None¶
Fügt x auf der linken Seite der Deque hinzu. Löst
IndexErroraus, wenn die Überlaufprüfung aktiviert ist und kein Platz mehr in der Warteschlange vorhanden ist.
- pop() Any¶
Entfernt ein Element von der rechten Seite der Deque und gibt es zurück. Löst
IndexErroraus, wenn keine Elemente vorhanden sind.
- popleft() Any¶
Entfernt ein Element von der linken Seite der Deque und gibt es zurück. Löst
IndexErroraus, wenn keine Elemente vorhanden sind.
- extend(iterable: Iterable) None¶
Erweitert die Deque, indem alle Elemente aus iterable rechts an die Deque angehängt werden. Löst
IndexErroraus, wenn die Überlaufprüfung aktiviert ist und kein Platz mehr in der Deque vorhanden ist.
- collections.namedtuple(name: str, fields: str | Sequence[str]) type¶
Dies ist eine Factory-Funktion zum Erstellen eines neuen namedtuple-Typs mit einem bestimmten Namen und einer Reihe von Feldern. Ein namedtuple ist eine Unterklasse von tuple, die den Zugriff auf seine Felder nicht nur über einen numerischen Index, sondern auch über eine Attributzugriffssyntax mit symbolischen Feldnamen ermöglicht. Fields ist eine Folge von Strings, die die Feldnamen angeben. Aus Kompatibilitätsgründen mit CPython kann es auch ein String mit durch Leerzeichen getrennten Feldnamen sein (dies ist jedoch weniger effizient). Anwendungsbeispiel:
from collections import namedtuple MyTuple = namedtuple("MyTuple", ("id", "name")) t1 = MyTuple(1, "foo") t2 = MyTuple(2, "bar") print(t1.name) assert t2.name == t2[1]
Instanzen stellen außerdem die folgende Methode bereit:
- collections._asdict() OrderedDict
Gibt die Feldnamen und ihre Werte als
OrderedDictzurück.
- class collections.OrderedDict(*args: Any, **kwargs: Any)¶
Unterklasse des Typs
dict, die sich die Reihenfolge der hinzugefügten Schlüssel merkt und bewahrt. Akzeptiert dieselben Konstruktorformen wiedict(ein Iterable von(key, value)-Paaren, ein anderes Mapping oder Schlüsselwortargumente). Beim Iterieren über ein OrderedDict werden Schlüssel/Elemente in der Reihenfolge zurückgegeben, in der sie hinzugefügt wurden:from collections import OrderedDict # To make benefit of ordered keys, OrderedDict should be initialized # from sequence of (key, value) pairs. d = OrderedDict([("z", 1), ("a", 2)]) # More items can be added as usual d["w"] = 5 d["b"] = 3 for k, v in d.items(): print(k, v)
Ausgabe:
z 1 a 2 w 5 b 3
- popitem() Tuple¶
Entfernt ein (key, value)-Paar aus dem Dictionary und gibt es zurück. Paare werden in LIFO-Reihenfolge zurückgegeben.
Unterschied zu CPython
OrderedDict.popitem()unterstützt das Argumentlast=Falsenicht und entfernt stets das letzte Element und gibt es zurück, sofern vorhanden.Ein Workaround hierfür besteht darin,
pop(<first_key>)zu verwenden, um das erste Element zu entfernen:first_key = next(iter(d)) d.pop(first_key)