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.
python2.7 windows7 Intel Core i5 CPU 2.4GHz Speicher 4,0 GB
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.
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)
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.
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)