Die Standardbibliothek von Python ist sehr leistungsfähig, aber es gibt zu viele Bibliotheken, um sie zu erfassen, und es gibt viele Leute, die sie kennen, aber ihre Existenz vergessen und das Rad neu erfinden. Zumindest bin ich einer dieser Leute, daher werde ich einige Datentypen in der Standard-Python-Bibliothek vorstellen, die nützlich sind, aber nur verwendet werden, wenn Sie sich dessen bewusst sind, als Memo für sich.
DefaultDict Offizielles Dokument: https://docs.python.jp/3/library/collections.html#collections.defaultdict
Wörtlich ein Wörterbuchtyp, mit dem Sie Standardwerte festlegen können. Das Schöne daran ist, dass Sie nicht jeden Schlüssel überprüfen müssen, um festzustellen, ob er im Wörterbuch enthalten ist. Wenn Sie beispielsweise die Anzahl der Vorkommen eines Wortes zählen, kann es in der folgenden Form verwendet werden:
>>> from collections import defaultdict
>>> d = defaultdict(int)
>>> string = "python is way way way way better than java"
>>> for w in string.split(" "):
... d[w] += 1
...
>>> d.items()
dict_items([('better', 1), ('than', 1), ('python', 1), ('java', 1), ('way', 4), ('is', 1)])
Übrigens ist es auf den ersten Blick schwer zu verstehen, aber der defaultdict-Konstruktor verwendet eine Funktion, die einen Wert (genauer gesagt ein aufrufbares Objekt) als Argument generiert, keinen Standardwert. Wenn Sie also Folgendes tun, wird eine Fehlermeldung angezeigt.
>>> from collections import defaultdict
>>> d = defaultdict(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: first argument must be callable or None
Korrekt,
>>> d = defaultdict(lambda: 0)
Oder
>>> d = defaultdict(int)
(Alles, was beim Aufruf 0 zurückgibt).
Counter Offizielles Dokument: https://docs.python.jp/3/library/collections.html#collections.Counter
Wenn Sie nur die Wörter zählen möchten, ist die Counter-Klasse äußerst praktisch. Wenn Sie eine Liste übergeben, wird die Anzahl der Elemente gezählt, und wenn Sie eine Zeichenfolge übergeben, wird die Anzahl der Zeichen für jedes Element / Zeichen gezählt.
>>> from collections import Counter
>>> c = Counter("python is way way way way better than C".split(" ")
>>> c
Counter({'way': 3, 'is': 1, 'better': 1, 'python': 1, 'C': 1, 'than': 1})
>>> c.most_common(1)
[('way', 3)]
Es ist ein Prozess, den Sie möglicherweise selbst implementieren, aber da es einen so praktischen Datentyp gibt, verwenden wir ihn. Wie Sie sehen können, ist es einfach, die häufigsten Werte und die am häufigsten vorkommenden n Elemente zu erhalten. Sie können auch Zähler addieren oder subtrahieren, sodass Zähler auch nützlich sind, wenn Sie Sätze vergleichen möchten.
deque Offizielles Dokument: https://docs.python.jp/3/library/collections.html#collections.deque
Da der integrierte Listentyp in Python bereits über eine Pop-Methode verfügt, kann diese leicht übersehen werden. Sie können jedoch ** Elemente mit ** O (1) vom Anfang bis zum Ende extrahieren und löschen. Es gibt einen Datentyp namens deque. Der Listentyp ist übrigens eine O (n) -Operation, da das Löschen von Daten von Anfang an das Verschieben von Elementen verursacht. Außerdem verwendet deque zum Zeitpunkt der Initialisierung einen Parameter namens maxlen. Wenn Sie in diesem Fall versuchen, ein Element hinzuzufügen, das größer als maxlen ist, wird dieser automatisch aus dem ersten Element gelöscht. Die Szene, in der Deque ins Spiel kommt, ist, wenn Sie eine Datenstruktur benötigen, deren Länge sich dynamisch und aus beiden Richtungen ändert. Zum Beispiel, wenn Sie einen Verlauf fester Länge verwalten möchten.
>>> from collections import deque
>>> history = deque(maxlen=100)
>>> lines = open("python.txt")
>>> for line in lines:
... if 'python' in line:
... print(lines)
... history.append(line)
Noch besser ist, dass Deque ** fadensicher ** ist. Es kann auch als Mittel zum Datenaustausch in Systemen verwendet werden, in denen sich Hersteller und Verbraucher in mehreren separaten Threads befinden.
PriorityQueue Offizielles Dokument: https://docs.python.jp/3/library/queue.html#queue.PriorityQueue
Ich wusste es bis vor kurzem nicht, aber Python implementiert Priority Queue in der Standardbibliothek. Ich habe es zuvor mit heapq implementiert, aber das mussten Sie nicht tun. PriorityQueue ist nützlich bei der Implementierung von Suchalgorithmen. Die Suche mit Breitenpriorität, die Suche mit Tiefenpriorität und die A * -Suche können auch als derselbe Algorithmus mit unterschiedlicher Priorität von PriorityQueue angesehen werden. Die Priority Queue ist übrigens auch threadsicher.
OrderedDict Offizielles Dokument: https://docs.python.jp/3/library/collections.html#collections.OrderedDict
Python-Wörterbuchelemente sind grundsätzlich nicht in Ordnung. Daher ist bei dynamischer Verwendung von Elementen die Reihenfolge, in der sie zurückgegeben werden, wenn nacheinander auf die Elemente des Wörterbuchs zugegriffen wird, unbestimmt. Darüber hinaus kann der Versuch, die Elemente eines Wörterbuchs zu sortieren, mühsam sein (oder besser gesagt, das Wörterbuch selbst kann nicht sortiert werden). OrderedDict macht es einfach, diese Dinge zu tun. Stellen Sie sich beispielsweise eine Situation vor, in der Sie Testergebnisse in einem Wörterbuch verwalten und die Ergebnisse in verschiedenen Reihenfolgen anzeigen:
>>> from collections import OrderedDict
>>> d = OrderedDict({"Suzuki": 100, "Tanaka": 30, "Sato": 50})
>>> sorted(d.items(), key=lambda x: x[1])
[('Tanaka', 30), ('Sato', 50), ('Suzuki', 100)]
>>> sorted(d.items(), key=lambda x: x[0])
[('Sato', 50), ('Suzuki', 100), ('Tanaka', 30)]
Wie im obigen Beispiel ist es einfach, nach Punktzahl oder Namen zu sortieren.
Dieses Mal habe ich mich auf fünf Datentypen konzentriert, die ich besonders nützlich finde, aber Python verfügt über eine Reihe nützlicher Standardbibliotheken, die ich zum Lesen empfehle (ich bin noch neu). Sie können das entdecken).
Recommended Posts