Einführung in die integrierten Modulsammlungen von Python
Collections ist ein integriertes Sammlungsmodul in Python, das Folgendes bereitstellt: viele nützliche Funktionen Collection-Klasse.
1. benanntes Tupel
Python bietet viele sehr nützliche Grundtypen, wie zum Beispiel den unveränderlichen Typ Tupel, den wir leicht zur Darstellung eines binären Vektors verwenden können.
Empfohlenes Lernen: Python-Video-Tutorial
>>> v = (2,3)
Wir haben festgestellt, dass (2,3) zwar zwei Koordinaten eines Vektors darstellt, wenn es keine zusätzliche Erklärung gibt, und es Es ist schwierig, direkt zu erkennen, dass dieses Tupel zur Darstellung einer Koordinate verwendet wird.
Eine Klasse dafür zu definieren ist eine große Sache.
>>> from collections import namedtuple >>> Vector = namedtuple('Vector', ['x', 'y']) >>> v = Vector(2,3) >>> v.x 2 >>> v.y 3
namedtuple ist eine Funktion, die ein benutzerdefiniertes Tupelobjekt erstellt, die Anzahl der Tupelelemente angibt und Attribute anstelle von Indizes verwenden kann, um auf ein Element des Tupels zu verweisen.
Auf diese Weise können wir mit „namedtuple“ auf einfache Weise einen Datentyp definieren. Er hat die Invarianz von „tuple“ und kann anhand von Attributen referenziert werden.
Wir können den Typ des erstellten Vektorobjekts überprüfen.
>>> type(v) <class '__main__.Vector'> >>> isinstance(v, Vector) True >>> isinstance(v, tuple) True
Wenn Sie Koordinaten und einen Radius zur Darstellung eines Kreises verwenden möchten, können Sie auch die Namedtuple-Definition verwenden:
>>> Circle = namedtuple('Circle', ['x', 'y', 'r']) # namedtuple('名称', [‘属性列表’])
2, deque
in den Daten In der Struktur wissen wir, dass Warteschlange und Stapel zwei sehr wichtige Datentypen sind, einer ist „First In First Out“ und der andere ist „Last In First Out“. Wenn in Python eine Liste zum Speichern von Daten verwendet wird, ist der Zugriff auf Elemente über den Index sehr schnell, das Einfügen und Löschen von Elementen jedoch sehr langsam, da es sich bei der Liste um einen linearen Speicher handelt, und wenn die Datenmenge groß ist, ist die Effizienz beim Einfügen und Löschen geringer sehr niedrig.
Deque ist eine doppelt verknüpfte Listenstruktur zur effizienten Implementierung von Einfüge- und Löschvorgängen. Sie eignet sich sehr gut zur Implementierung von Datenstrukturen wie Warteschlangen und Stapeln. Zusätzlich zur Implementierung von append() und pop() der Liste unterstützt
>>> from collections import deque >>> deq = deque([1, 2, 3]) >>> deq.append(4) >>> deq deque([1, 2, 3, 4]) >>> deq.appendleft(5) >>> deq deque([5, 1, 2, 3, 4]) >>> deq.pop() 4 >>> deq.popleft() 5 >>> deq deque([1, 2, 3])
deque auch appendleft() und popleft(), sodass Sie dem Kopf sehr effizient Elemente hinzufügen oder daraus löschen können.
3. defaultdict
Wenn der referenzierte Schlüssel nicht vorhanden ist, wird KeyError ausgelöst. Wenn Sie möchten, dass ein Standardwert zurückgegeben wird, wenn der Schlüssel nicht vorhanden ist, können Sie defaultdict verwenden.
>>> from collections import defaultdict >>> dd = defaultdict(lambda: 'defaultvalue') >>> dd['key1'] = 'a' >>> dd['key1'] 'a' >>> dd['key2'] # key2未定义,返回默认值 'defaultvalue'
Beachten Sie, dass der Standardwert durch den Aufruf der Funktion zurückgegeben wird und die Funktion beim Erstellen des defaultdict-Objekts übergeben wird.
Mit Ausnahme der Rückgabe des Standardwerts, wenn der Schlüssel nicht vorhanden ist, sind die anderen Verhaltensweisen von defaultdict genau die gleichen wie dict.
4. OrderedDict
Bei Verwendung von dict sind die Tasten ungeordnet. Bei der Iteration über dict können wir die Reihenfolge der Schlüssel nicht bestimmen.
Aber wenn Sie die Reihenfolge der Schlüssel beibehalten möchten, können Sie OrderedDict verwenden.
>>> from collections import OrderedDict >>> d = dict([('a', 1), ('b', 2), ('c', 3)]) >>> d # dict的Key是无序的 {'a': 1, 'c': 3, 'b': 2} >>> od = OrderedDict([('a', 1), ('b', 2), ('c', 3)]) >>> od # OrderedDict的Key是有序的 OrderedDict([('a', 1), ('b', 2), ('c', 3)])
Beachten Sie, dass die Schlüssel von OrderedDict in der Reihenfolge der Einfügung angeordnet werden, nicht der Schlüssel selbst.
>>> od = OrderedDict() >>> od['z'] = 1 >>> od['y'] = 2 >>> od['x'] = 3 >>> list(od.keys()) # 按照插入的Key的顺序返回 ['z', 'y', 'x']
OrderedDict kann ein FIFO-Dikt (First In, First Out) implementieren Wenn die Kapazität das Limit überschreitet, löschen Sie zuerst den frühesten hinzugefügten Schlüssel.
from collections import OrderedDict class LastUpdatedOrderedDict(OrderedDict): def __init__(self, capacity): super(LastUpdatedOrderedDict, self).__init__() self._capacity = capacity def __setitem__(self, key, value): containsKey = 1 if key in self else 0 if len(self) - containsKey >= self._capacity: last = self.popitem(last=False) print('remove:', last) if containsKey: del self[key] print('set:', (key, value)) else: print('add:', (key, value)) OrderedDict.__setitem__(self, key, value)
5. ChainMap
ChainMap kann eine Reihe von Diktaten aneinanderreihen, um ein logisches Diktat zu bilden. ChainMap selbst ist ebenfalls ein Diktat, aber bei der Suche werden die internen Diktate der Reihe nach durchsucht.
Wann ist die beste Zeit, ChainMap zu verwenden? Beispiel: Anwendungen müssen häufig Parameter übergeben. Parameter können über die Befehlszeile oder über Umgebungsvariablen übergeben werden und können auch Standardparameter haben. Wir können ChainMap verwenden, um die Prioritätssuche von Parametern zu implementieren. Das heißt, überprüfen Sie zuerst die Befehlszeilenparameter, falls sie nicht übergeben werden, und überprüfen Sie dann die Umgebungsvariablen. Wenn nicht, verwenden Sie die Standardparameter.
Der folgende Code zeigt, wie man die beiden Parameter Benutzer und Farbe findet.
from collections import ChainMap import os, argparse # 构造缺省参数: defaults = { 'color': 'red', 'user': 'guest' } # 构造命令行参数: parser = argparse.ArgumentParser() parser.add_argument('-u', '--user') parser.add_argument('-c', '--color') namespace = parser.parse_args() command_line_args = { k: v for k, v in vars(namespace).items() if v } # 组合成ChainMap: combined = ChainMap(command_line_args, os.environ, defaults) # 打印参数: print('color=%s' % combined['color']) print('user=%s' % combined['user'])
Wenn keine Parameter vorhanden sind, drucken Sie die Standardparameter aus:
$ python3 use_chainmap.py color=red user=guest
Wenn die Befehlszeilenparameter übergeben werden, werden zuerst die Befehlszeilenparameter verwendet:
$ python3 use_chainmap.py -u bob color=red user=bob
Gleichzeitig wird die Befehlszeile in Parametern und Umgebungsvariablen übergeben, Befehlszeilenparameter haben eine höhere Priorität:
$ user=admin color=green python3 use_chainmap.py -u bob color=green user=bob
6.Counter
Counter ist ein einfacher Zähler , zum Beispiel das Zählen der Anzahl der Vorkommen von Zeichen Count:
from collections import Counter >>> s = 'abbcccdddd' >>> Counter(s) Counter({'d': 4, 'c': 3, 'b': 2, 'a': 1})
Counter ist eigentlich eine Unterklasse von dict.
7. Zusammenfassung
Das Sammlungsmodul bietet einige nützliche Sammlungsklassen, die nach Bedarf ausgewählt werden können.
Das obige ist der detaillierte Inhalt vonEinführung in die in Python integrierten Modulsammlungen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!