Le moyen le plus rapide pour rechercher une liste en python
Quand vous faites quelque chose comme "test" in a
où a
une liste python de faire une recherche séquentielle sur la liste ou faut-il créer une table de hachage de la représentation afin d'optimiser la recherche? Dans l'application, j'ai besoin de cela pour je vais faire beaucoup de recherches sur la liste, donc serait-il préférable de faire quelque chose comme b = set(a)
et puis "test" in b
? Notez également que la liste des valeurs que je vais avoir de ne pas avoir de doublons et je n'ai pas vraiment de soins au sujet de l'ordre dans; j'ai juste besoin d'être en mesure de vérifier l'existence d'une valeur.
InformationsquelleAutor blcArmadillo | 2011-05-13
Vous devez vous connecter pour publier un commentaire.
Ne pas utiliser une liste, utilisez un
set()
à la place. Il a exactement les propriétés que vous souhaitez, y compris un ultra-rapidein
test.J'ai vu la vitesse de 20x et plus élevés dans les endroits (surtout lourds calculs) où une seule liste a été changé pour un jeu.
"test" in a
avec une listea
va faire une recherche linéaire. La configuration d'une table de hachage sur la mouche serait beaucoup plus cher qu'une recherche linéaire."test" in b
de l'autre coté, faire un amoirtised O(1) hachage look-up.Dans le cas que vous décrivez, il ne semble pas être une raison pour utiliser une liste sur un jeu.
"test" in b
sera plus lente, depuis la construction de l'ensemble ne serait pas linéaire.Je pense qu'il serait mieux d'aller avec l'ensemble de la mise en œuvre. Je sais pour un fait que les ensembles de O(1) recherche de temps. Je pense que les listes d'O(n) temps de recherche. Mais même si les listes sont également en O(1) recherche, vous ne perdez rien à commutation de jeux.
De plus, les ensembles de ne pas permettre à des valeurs en double. Cela rendra votre programme un peu plus de mémoire efficace, ainsi
Liste et les tuples semble avoir le même temps, et à l'aide de "en" est lent pour des données de grande taille:
Ici est bien meilleure solution: Le moyen le plus efficace pour une recherche/la recherche dans une liste énorme (python)
C'est super rapide: