Le site suivant décrit ce qui suit. La validation des éléments (O (1)) à l'aide d'ensembles et de dictionnaires est plus rapide que la récupération de tableaux (O (n)). Lorsque vous recherchez a dans b, b doit être des ensembles ou des dictionnaires, pas des listes ou des taples. http://www.peignot.net/python-speed
Est-ce vrai? En quoi est-ce différent de ce que je pensais? J'étais curieux, alors je l'ai essayé.
python2.7 windows7 Intel Core i5 CPU 2.4GHz Mémoire 4,0 Go
Dans une liste, un dictionnaire et un type d'ensemble, j'ai créé une séquence d'entiers (1 million d'éléments) pour chaque multiple de 1, chaque multiple de 2 et chaque multiple de 3, et référencée de 1 à 10000. La raison de la création d'une séquence d'entiers pour chaque multiple de 1, chaque multiple de 2 et chaque multiple de 3 est d'étudier l'effet du taux de succès sur la vitesse de traitement. Le nombre total de tests est de 10 fois. Voir le code ci-dessous pour plus de détails.
Alors que la référence de la liste était assez lente pour mourir, le dictionnaire et le type d'ensemble étaient très rapides. Dans la liste, il a été constaté que la vitesse de traitement était clairement plus lente lorsque le taux de réussite était faible que lorsque le taux de réussite était élevé. L'unité est la seconde, qui correspond au temps total d'exécution 10 fois. En revanche, la vitesse de traitement du type dictionnaire et du type d'ensemble n'a pas tellement diminué. (3/5 8:08 Correction du chiffre car la plage était incorrecte)
Dans une liste avec un grand nombre d'éléments Élément dans la liste L'écriture doit être évitée autant que possible. Vraiment assez lent pour mourir.
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)