Verwendung für Python-Stapel und -Warteschlangen (Geschwindigkeitsvergleich jeder Datenstruktur)

Einführung

Dieser Artikel befasst sich hauptsächlich mit wettbewerbsfähiger Programmierung.

Es gibt mehrere Möglichkeiten, Stapel und Warteschlangen in Python zu implementieren.

--Stapel

Welches davon ist übrigens das beste? Dieses Mal konzentrieren wir uns auf den Geschwindigkeitsaspekt.

Messmethode

Hinzufügen und Abrufen von Elementen 10-mal, 100-mal, 1000-mal, 10000-mal und 100000-mal für jede Datenstruktur.

Im gesamten Code wird der unten stehende Importteil weggelassen.

Teil importieren


from collections import deque
from queue import Queue
import time

Stapel

Liste verwenden


# stack(list)
stack_list_append = []
stack_list_pop = []
for i in range(1, 6):
    start = time.time()

    stack_list = []
    for j in range(10 ** i):
        stack_list.append(j)

    stack_list_append.append(time.time() - start)

    start = time.time()

    for j in range(10 ** i):
        stack_list.pop()

    stack_list_pop.append(time.time() - start)

Verwenden Sie deque


# stack(deque)
stack_deque_append = []
stack_deque_pop = []
for i in range(1, 6):
    start = time.time()

    stack_deque = deque([])
    for j in range(10 ** i):
        stack_deque.append(j)

    stack_deque_append.append(time.time() - start)

    start = time.time()

    for j in range(10 ** i):
        stack_deque.pop()

    stack_deque_pop.append(time.time() - start)

Warteschlange

Liste verwenden


# queue(list)
queue_list_append = []
queue_list_pop = []
for i in range(1, 6):
    start = time.time()

    queue_list = []
    for j in range(10 ** i):
        queue_list.append(j)

    queue_list_append.append(time.time() - start)

    start = time.time()

    for j in range(10 ** i):
        queue_list.pop(0)

    queue_list_pop.append(time.time() - start)

Verwenden Sie deque


# queue(deque)
queue_deque_append = []
queue_deque_pop = []
for i in range(1, 6):
    start = time.time()

    queue_deque = deque([])
    for j in range(10 ** i):
        queue_deque.append(j)

    queue_deque_append.append(time.time() - start)

    start = time.time()

    for j in range(10 ** i):
        queue_deque.popleft()

    queue_deque_pop.append(time.time() - start)

Warteschlange verwenden


# queue(Queue)
queue_Queue_append = []
queue_Queue_pop = []

for i in range(1, 6):
    start = time.time()

    queue_Queue = Queue()
    for j in range(10 ** i):
        queue_Queue.put(j)

    queue_Queue_append.append(time.time() - start)

    start = time.time()

    for j in range(10 ** i):
        queue_Queue.get()

    queue_Queue_pop.append(time.time() - start)

Messergebnis

Wenn das Messergebnis grafisch dargestellt wird, ist es wie folgt.

スクリーンショット 2020-03-01 16.35.38.png

Beginnen wir oben links.

Stapelergebnis

Element hinzufügen

Die Grafik oben links. スクリーンショット 2020-03-01 16.39.29.png Deque ist etwas schneller, aber es ist ungefähr das gleiche.

Elemente extrahieren

Es ist eine Grafik oben rechts. スクリーンショット 2020-03-01 16.40.06.png Auch hier ist Deque etwas schneller, aber es ist ungefähr das gleiche.

Ergebnis der Warteschlange

Element hinzufügen

Es ist eine Grafik unten links. スクリーンショット 2020-03-01 16.40.40.png Bei einer großen Anzahl von Elementen ist die Warteschlange mehr als zehnmal langsamer als die anderen.

Elemente extrahieren

Das Diagramm unten rechts. スクリーンショット 2020-03-01 16.40.48.png Die Warteschlange entspricht dem Hinzufügen eines Elements, die Liste ist jedoch offensichtlich schlecht. Es ist mehr als 100 Mal langsamer als die schnellste Deque.

Fazit

Es ist am besten, collection.deque sowohl für Stapel als auch für Warteschlangen zu verwenden.

Da es eine große Sache ist, schreibe ich eine einfache Verwendung.

Stapel

from collections import deque

s = deque([])
s.append(1)  # [1]
s.append(2)  # [1, 2]
s.append(3)  # [1, 2, 3]
s.pop()      #Von oben entfernen[1, 2, 3] -> [1, 2]
s.pop()      # [1, 2] -> [1]
s.pop()      # [1] -> []

Warteschlange

Im Stapel war es Pop, als es entfernt wurde, aber in der Warteschlange ist es nur Popleft.

from collections import deque

q = deque([])
q.append(1)  # [1]
q.append(2)  # [1, 2]
q.append(3)  # [1, 2, 3]
q.popleft()  #Von unten entfernen[1, 2, 3] -> [2, 3]
q.popleft()  # [2, 3] -> [3]
q.popleft()  # [3] -> []

Recommended Posts

Verwendung für Python-Stapel und -Warteschlangen (Geschwindigkeitsvergleich jeder Datenstruktur)
Vergleich der Verwendung von Funktionen höherer Ordnung in Python 2 und 3
Verwendung von "deque" für Python-Daten
Liste der Python-Bibliotheken für Datenwissenschaftler und Dateningenieure
Python netCDF4 Lesegeschwindigkeit und Verschachtelung von for-Anweisungen
[Einführung in Azure für Kaggle-Benutzer] Vergleich zum Starten und Verwenden von Azure Notebooks und Azure Notebooks VM
[Python] So legen Sie Variablennamen dynamisch fest und vergleichen die Geschwindigkeit
Anwendung von Python: Datenbereinigung Teil 3: Verwendung von OpenCV und Vorverarbeitung von Bilddaten
[Python] Zusammenfassung der Verwendung von Split- und Join-Funktionen
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und Klassen
Verarbeitung zur Verwendung von notMNIST-Daten in Python (und versucht, sie zu klassifizieren)
Geschwindigkeitsvergleich der Volltextverarbeitung von Wiktionary mit F # und Python
Ich möchte sowohl den Schlüssel als auch den Wert des Python-Iterators verwenden
Geschwindigkeitsvergleich der Python-XML-Perspektive
[Einführung in Data Scientists] Grundlagen von Python ♬ Bedingte Verzweigung und Schleifen
[Einführung in Data Scientists] Grundlagen von Python ♬ Funktionen und anonyme Funktionen usw.
[Python of Hikari-] Kapitel 05-09 Steuerungssyntax (Verwendung von for-Anweisung und while-Anweisung ordnungsgemäß)
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
[Python] Zusammenfassung der Verwendung von Pandas
So installieren und verwenden Sie pandas_datareader [Python]
Python-Datenstruktur und interne Implementierung ~ Liste ~
[Python] Organisieren der Verwendung für Anweisungen
Struktur und Betrieb der Python-Daten (Python-Lernnotiz ③)
[Python2.7] Zusammenfassung der Verwendung von unittest
Python: Verwendung von Einheimischen () und Globalen ()
Verwendung von Python zip und Aufzählung
Komprimieren Sie Python-Daten und schreiben Sie in SQLite
Zusammenfassung der Verwendung der Python-Liste
[Python2.7] Zusammenfassung der Verwendung des Unterprozesses
Verwendung ist und == in Python
[Einführung in Data Scientist] Grundlagen von Python ♬
Geschwindigkeitsvergleich von murmurhash3, md5 und sha1
[Frage] Wie verwende ich plot_surface von Python?
Um Python zu beschleunigen, fassen Sie den Umfang der Berechnung des Sammlungstyps (Liste / Tupel / Wörterbuch / Satz) für jeden Zweck zusammen.
[Python] Von der morphologischen Analyse von CSV-Daten bis zur CSV-Ausgabe und Diagrammanzeige [GiNZA]
Datenanalyse in Python Zusammenfassung der Quellen, die Anfänger zuerst betrachten sollten
OpenGoddard Verwendung der 2-Python-Bibliothek zur nichtlinearen optimalen Steuerung und Trajektoriengenerierung
Tipps für diejenigen, die verwirrt sind, wie man is und == in Python verwendet
Verwendung der OpenGoddard 3-Python-Bibliothek zur nichtlinearen optimalen Steuerung und Trajektoriengenerierung
Verwendung der OpenGoddard 4-Python-Bibliothek zur nichtlinearen optimalen Steuerung und Trajektoriengenerierung
Verwendung von OAuth und API für Dienstkonten mit Google API Client für Python
Organisieren Sie Python-Tools, um die anfängliche Bewegung von Datenanalyse-Wettbewerben zu beschleunigen
Verwendung der OpenGoddard 1-Python-Bibliothek zur nichtlinearen optimalen Steuerung und Trajektoriengenerierung
[Einführung in Python] So erhalten Sie den Datenindex mit der for-Anweisung
[Python] Verwendung von zwei Arten von type ()
[Einführung in die Statistik] Welche Art von Verteilung ist die t-Verteilung, die Chi-Quadrat-Verteilung und die F-Verteilung? Eine kleine Zusammenfassung der Verwendung von [Python]
[Python3] Geschwindigkeitsvergleich usw. über den Entzug von numpy.ndarray
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Verwenden Sie Dekorateure, um eine erneute Ausführung der Datenverarbeitung zu verhindern
Zusammenfassung der Verwendung von MNIST mit Python
Verwendung von Datenanalysetools für Anfänger
Vergleichen Sie die Geschwindigkeit von Python Append und Map
Python-Entwicklungsumgebung - Verwendung von Pyenv und Virtualenv-
[Python] Verwendung von Hash-Funktion und Taple.
Geschwindigkeit: Element am Ende des Python-Arrays hinzufügen
Zusammenfassung des Studiums von Python zur Verwendung von AWS Lambda
R- und Python-Schreibvergleich (euklidische Methode der gegenseitigen Teilung)
Liste des zu verschiebenden und zu merkenden Python-Codes
Datenbereinigung 3 Verwendung von OpenCV und Vorverarbeitung von Bilddaten
Vergleich von Python und Ruby (Environment / Grammar / Literal Edition)