J'ai été en utilisant un dictionnaire comme une table de recherche, mais j'ai commencé à me demander si liste serait mieux pour mon application, la quantité d'entrées dans ma table de recherche n'était pas si grande que cela. Je sais que les listes d'utiliser C des tableaux sous le capot, ce qui m'a fait conclure que la recherche dans une liste, avec seulement quelques éléments serait mieux que dans un dictionnaire (l'accès à quelques-uns des éléments d'un tableau est plus rapide que le calcul d'un hash).
J'ai décidé de profil les solutions de rechange, mais les résultats m'ont surpris. La recherche de liste a été seulement de mieux avec un seul élément! Voir la figure suivante (graphe log-log):
Donc, voici la question: Pourquoi faire des recherches dans les listes effectuer si mal? Ce qui me manque?
Sur un côté de la question, quelque chose d'autre qui a appelé mon attention était un peu "discontinuité" dans le dict de recherche de temps après environ 1000 entrées. J'ai tracé le dict recherche du temps seul à le montrer.
p.s.1-je savoir au sujet de O(n) vs O(1) amorti temps pour les tableaux et les tables de hachage, mais c'est généralement le cas que pour un petit nombre d'éléments de parcourir un tableau est mieux que d'utiliser une table de hachage.
p.s.2 Voici le code que j'ai utilisé pour comparer les dict et la recherche de liste de temps:
import timeit
lengths = [2 ** i for i in xrange(15)]
list_time = []
dict_time = []
for l in lengths:
list_time.append(timeit.timeit('%i in d' % (l/2), 'd=range(%i)' % l))
dict_time.append(timeit.timeit('%i in d' % (l/2),
'd=dict.fromkeys(range(%i))' % l))
print l, list_time[-1], dict_time[-1]
p.s.3 À L'Aide De Python 2.7.13