Ich habe die Referenzgeschwindigkeit überprüft, wenn ich Python-Liste, Wörterbuch und Set-Typ verwendet habe.

Einführung

Die folgende Site beschreibt Folgendes. Die Elementvalidierung (O (1)) mit Mengen und Wörterbüchern ist schneller als das Abrufen von Arrays (O (n)). Beim Nachschlagen von a in b sollte b Mengen oder Wörterbücher sein, keine Listen oder Taples. http://www.peignot.net/python-speed

Ist es wahr? Wie unterschiedlich ist es von dem, was ich dachte? Ich war neugierig, also habe ich es tatsächlich versucht.

Ausführungsumgebung

python2.7 windows7 Intel Core i5 CPU 2.4GHz Speicher 4,0 GB

Ausführungsbedingung

In einer Liste, einem Wörterbuch und einem Mengen-Typ habe ich eine ganzzahlige Sequenz (1 Million Elemente) für jedes Vielfache von 1, jedes Vielfache von 2 und jedes Vielfache von 3 erstellt und in 1 bis 10.000 angegeben. Der Grund für die Erstellung einer Ganzzahlsequenz für jedes Vielfache von 1, jedes Vielfache von 2 und jedes Vielfache von 3 besteht darin, die Auswirkung der Trefferquote auf die Verarbeitungsgeschwindigkeit zu untersuchen. Die Gesamtzahl der Tests beträgt das 10-fache. Einzelheiten finden Sie im folgenden Code.

Ergebnis

Während die Listenreferenz langsam genug war, um zu sterben, waren das Wörterbuch und der Set-Typ superschnell. In der Liste wurde festgestellt, dass die Verarbeitungsgeschwindigkeit bei niedriger Trefferquote deutlich langsamer war als bei hoher Trefferquote. Die Einheit ist Sekunden. Dies ist die Gesamtzeit, wenn sie 10 Mal ausgeführt wird. Andererseits nahm die Verarbeitungsgeschwindigkeit des Wörterbuchtyps und des eingestellten Typs nicht so stark ab. (3/5 8:08 Die Zahl wurde korrigiert, weil der Bereich falsch war) speed_in.png

Fazit

In einer Liste mit einer großen Anzahl von Elementen Element in Liste Schreiben sollte so weit wie möglich vermieden werden. Wirklich langsam genug, um zu sterben.

Experimenteller Code

def lists(q,h):
  ls = [i for i in range(0,q*h,h)]
  for i in range(q): i in ls

def dicts(q,h):
  dc = {i:i for i in range(0,q*h,h)}
  for i in range(q): i in dc  

def setts(q,h):
  st = set(i for i in range(0,q*h,h))
  for i in range(q): i in st

def exe(func,num=100):
  from timeit import timeit
  setup = 'from __main__ import ' + func[:5]
  print "%s: %s" % (func, timeit(func, setup, number=num))

if __name__=='__main__':
  q = 10**4
  funcs = ['lists','dicts','setts']
  hits = [1,2,3]
  for h in hits:
    for f in funcs:
      func = '%s(%s, %s)'  % (f,q,h)
      print func
      exe(func,10)

Recommended Posts

Ich habe die Referenzgeschwindigkeit überprüft, wenn ich Python-Liste, Wörterbuch und Set-Typ verwendet habe.
Ich habe die Geschwindigkeit der Referenz des Pythons in der Liste und die Referenz der Wörterbucheinbeziehung aus der In-Liste verglichen.
Ich möchte den Wörterbuchtyp in der Liste eindeutig machen
Bei Verwendung von @property in Python wird ein Attribut nicht festgelegt
[Python] Ich habe versucht, den kollektiven Typ (Satz) auf leicht verständliche Weise zusammenzufassen.
Ich habe Umgebungsvariablen in Docker festgelegt und in Python angezeigt.
Ich habe die Geschwindigkeit der Listeneinschlussnotation für und während mit Python2.7 gemessen.
Ich habe "Python Dictionary Type" und "Excel Function" verglichen.
[Python] Vorsichtsmaßnahmen beim Erfassen von Daten durch Scraping und Einfügen in die Liste
Ich habe die Geschwindigkeit regulärer Ausdrücke in Ruby, Python und Perl (Version 2013) verglichen.
Um Python zu beschleunigen, fassen Sie den Umfang der Berechnung des Sammlungstyps (Liste / Tupel / Wörterbuch / Satz) für jeden Zweck zusammen.
Grundeinstellungen bei Verwendung der foursquare-API mit Python
Ich habe mir die Versionen von Blender und Python angesehen
Ich habe die Berechnungszeit von "X in Liste" (lineare Suche / dichotome Suche) und "X in Menge" untersucht.
Ich habe das in Google Cloud Dataflow vorinstallierte Python-Paket überprüft
Holen Sie sich den MIME-Typ in Python und bestimmen Sie das Dateiformat
In Python werden die Elemente in der Liste sortiert und als Elemente und Vielfache ausgegeben.
Den Typ mit Python beherrschen? (Wann ist eine Typprüfung durchzuführen?)
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
Lösen Sie das japanische Problem, wenn Sie das CSV-Modul in Python verwenden.
Ich habe N-Queen in verschiedenen Sprachen implementiert und die Geschwindigkeit gemessen
Ich habe den Dollar-Yen mit der k-medoids-Methode in Python geclustert und die richtige Antwortrate gefunden.
Ich habe die Geschwindigkeit von Hash mit Topaz, Ruby und Python verglichen
Unterschied zwischen list () und [] in Python
Vorsichtsmaßnahmen bei der Verwendung von Pit mit Python
Ich habe einen AttributeError erhalten, als ich die offene Methode in Python verspottet habe
Vorsichtsmaßnahmen bei Verwendung einer Liste oder eines Wörterbuchs als Standardargument
Ich habe Node.js und Python beim Erstellen eines Miniaturbilds mit AWS Lambda verglichen
Rufen Sie den Wert des Dropdown-Menüs mit Python und Selen ab und legen Sie ihn fest
Ich habe die Warteschlange in Python geschrieben
Was tun, wenn der Werttyp in Python nicht eindeutig ist?
Bei Verwendung regulärer Ausdrücke in Python
Ich habe den Stack in Python geschrieben
Ich habe die numerische Berechnung von Python durch Rust ersetzt und die Geschwindigkeit verglichen
Der Dateiname war in Python schlecht und ich war süchtig nach Import
Benachrichtigen Sie mit Notification Center, wenn die Ausführungsumgebung in Python macOS ist
Ein nützlicher Hinweis, wenn Sie Python nach langer Zeit verwenden
Hinweise zur Verwendung von cChardet und python3-chardet in Python 3.3.1.
Versuchen Sie es mit der Wunderlist-API in Python
Versuchen Sie, die Kraken-API mit Python zu verwenden
Nehmen Sie die logische Summe von List in Python (Zip-Funktion)
Tweet mit der Twitter-API in Python
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
Unterschied zwischen Anhängen und + = in der Python-Liste
Ordnen Sie die in pythons models.py festgelegte Tabelle zu
Ruft die EDINET-Codeliste in Python ab
Verarbeitung (Python) Diagramm der Koordinaten der Liste Geben Sie an, wie oft in draw ()
Ich verglich die Geschwindigkeit von Go Language Web Framework Echo und Python Web Framework Flask
Bei der Konvertierung von CSV in JSON mit Python bin ich auf einen Zeichencode gestoßen
Was ich getan habe, als ich mit Lambda Python im Zeitlimit steckte
Drei Dinge, von denen ich süchtig war, als ich Python und MySQL mit Docker verwendete
Beachten Sie, dass ich den Algorithmus der kleinsten Quadrate verstehe. Und ich habe es in Python geschrieben.
Ich möchte den Dateinamen, die Zeilennummer und den Funktionsnamen in Python 3.4 erhalten
Ich habe in der Bibliothek nach der Verwendung der Gracenote-API gesucht
[Python] Sortieren Sie die Liste von pathlib.Path in natürlicher Reihenfolge
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen