Deque in Python: Effiziente Warteschlangen und Stapel implementieren
WBOY
Freigeben: 2023-04-12 21:46:06
nach vorne
2492 Leute haben es durchsucht
deque in Python ist eine hochoptimierte Low-Level-Deque, die für die Implementierung eleganter und effizienter Pythonic-Warteschlangen und -Stacks nützlich ist, die die häufigsten listenbasierten Datentypen in der Informatik sind.
In diesem Artikel lernt Herr Yun Duo gemeinsam mit Ihnen Folgendes:
Beginnen Sie mit der Verwendung von Deque.
Elemente effektiv öffnen und anhängen.
Greifen Sie auf jedes Element in Deque zu.
Erstellen Sie eine effiziente Warteschlange mit Deque Beginnen Sie mit der Verwendung von deque
Das Anhängen von Elementen an das rechte Ende einer Python-Liste und das Einfügen von Elementen sind im Allgemeinen sehr effizient. Wenn die Zeitkomplexität in Big O ausgedrückt wird, können wir sagen, dass es sich um O(1) handelt. Wenn Python Speicher neu zuweisen muss, um die zugrunde liegende Liste zu vergrößern und neue Elemente aufzunehmen, werden diese Vorgänge langsamer und die Zeitkomplexität kann O(n) werden. Darüber hinaus sind die Vorgänge zum Anhängen und Einfügen von Elementen am linken Ende der Python-Liste ebenfalls sehr ineffizient und haben eine zeitliche Komplexität von O(n). Da Listen .append()- und .pop()-Operationen bereitstellen, können sie als Stapel und Warteschlangen verwendet werden. Die Leistungsprobleme beim Anhängen und Entfernen von Vorgängen am linken und rechten Ende der Liste wirken sich stark auf die Gesamtleistung der Anwendung aus. Pythons Deque war der erste Datentyp, der dem Collections-Modul in Python 2.4 hinzugefügt wurde. Dieser Datentyp wurde speziell entwickelt, um die Effizienzprobleme von .append() und .pop() in Python-Listen zu überwinden. Deques sind sequenzartige Datentypen, die als Verallgemeinerung von Stapeln und Warteschlangen konzipiert sind. Sie unterstützen speichereffiziente und schnelle Anhänge- und Pop-Vorgänge an beiden Enden der Datenstruktur. Append- und Pop-Operationen an beiden Enden eines Deque-Objekts sind stabil und gleichermaßen effizient, da die Deque als doppelt verknüpfte Liste implementiert ist. Darüber hinaus sind Append- und Pop-Vorgänge auf Deque Thread-sicher und speichereffizient. Diese Funktionen machen deque besonders nützlich für die Erstellung benutzerdefinierter Stacks und Warteschlangen in Python. Wenn Sie die zuletzt gesehene Elementliste speichern müssen, können Sie auch deque verwenden, da die maximale Länge von deque begrenzt werden kann. Wenn wir dies tun, werden die Elemente an einem Ende automatisch verworfen, sobald die Deque voll ist, wenn wir am anderen Ende neue Elemente hinzufügen. Das Folgende ist eine Zusammenfassung der Hauptfunktionen von deque:
Speichert Elemente jedes Datentyps
ist ein veränderlicher Datentyp
Unterstützt Mitgliedsoperationen mit dem in-Operator
Unterstützt Indizes wie a_deque[i]
Nein Unterstützt Slicing wie a_deque[0:2]
Unterstützt integrierte Funktionen, die mit Sequenzen und iterierbaren Objekten arbeiten, wie len(), sorted(), reversed() usw.
Wird nicht unterstützt Inplace-Sortierung
Unterstützt normale Iteration und Reverse-Iteration
Unterstützt die Verwendung von Pickle
Sicherstellung schneller, speichereffizienter und threadsicherer Pop- und Append-Vorgänge an beiden Enden
Das Erstellen von Deque-Instanzen ist relativ einfach. Importieren Sie einfach Deque aus der Sammlung und rufen Sie es mit einem optionalen Iterator als Argument auf.
Wenn Sie eine Deque instanziieren, ohne eine Iterable als Parameter anzugeben, erhalten Sie eine leere Deque. Wenn ein Iterable bereitgestellt und eingegeben wird, initialisiert die Deque eine neue Instanz mit ihren Daten. Die Initialisierung erfolgt von links nach rechts mit deque.append(). Der Deque-Initialisierer erfordert die folgenden zwei optionalen Parameter.
iterable ist ein Iterator, der Initialisierungsdaten bereitstellt.
maxlen ist eine Ganzzahl, die die maximale Länge der Deque angibt.
Wie bereits erwähnt, erhalten Sie eine leere Deque, wenn Sie keine Iterable bereitstellen. Wenn Sie einen Wert für maxlen angeben, speichert Ihre Deque die Elemente nur bis maxlen.
Schließlich können Sie auch ungeordnete iterierbare Objekte wie Sammlungen verwenden, um Deque zu initialisieren. In diesen Fällen gibt es in der endgültigen Deque keine vordefinierte Reihenfolge der Elemente. Effizientes Anhängen und Anhängen von ElementenDer wichtigste Unterschied zwischen Deque und List besteht darin, dass erstere an beiden Enden der Sequenz effiziente Anhänge- und Anhängeoperationen durchführen kann. Die Deque-Klasse implementiert die speziellen Methoden .popleft() und .appendleft(), um direkt am linken Ende der Sequenz zu arbeiten.
Verwenden Sie hier .popleft() und .appendleft(), um den linken Endwert der Zahlen aufzurufen und hinzuzufügen. Diese Methoden sind für Deque konzipiert, und list verfügt über keine solche Methode. Deque bietet auch .append()- und .pop()-Methoden wie list, um am rechten Ende der Sequenz zu arbeiten. Das Verhalten von .pop() ist jedoch anders.
>>> from collections import deque
>>> numbers = deque([1, 2, 3, 4])
>>> numbers.pop()
4
>>> numbers.pop(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: pop() takes no arguments (1 given)
Nach dem Login kopieren
Hier entfernt .pop() das letzte Element im Deque-Container und gibt es zurück. Diese Methode akzeptiert keinen Index als Parameter und kann daher nicht zum Entfernen beliebiger Elemente aus der Deque verwendet werden. Sie können es nur zum Entfernen und Zurückgeben des Elements ganz rechts verwenden. Wir glauben, dass Deque eine doppelt verknüpfte Liste ist. Daher enthält jedes Element in einem bestimmten Deque-Container einen Verweis (Zeiger) auf das vorherige und nächste Element in der Sequenz. Die doppelt verknüpfte Liste macht das Hinzufügen und Entfernen von Elementen an beiden Enden einfach und effizient, da nur der Zeiger aktualisiert werden muss. Daher weisen die beiden Operationen eine ähnliche Leistung auf, beide sind O(1). Sie sind auch hinsichtlich der Leistung vorhersehbar, da keine Notwendigkeit besteht, Speicher neu zuzuweisen und vorhandene Elemente zu verschieben, um neue Elemente aufzunehmen.
>>> from collections import deque
>>> numbers = deque([1, 2, 3, 4, 5])
>>> numbers[1:3]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sequence index must be integer, not 'slice'
Nach dem Login kopieren
Deque支持索引,却不支持分片。通常来说在一个链表上执行切片非常低效。
虽然 deque 与 list 非常相似,但 list 是基于数组的,而 deque 是基于双链表的。
Das obige ist der detaillierte Inhalt vonDeque in Python: Effiziente Warteschlangen und Stapel implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn