1223 votes

Moyen le plus rapide pour vérifier si une valeur existe dans une liste

Je suis à la recherche de la façon la plus rapide de savoir si une valeur existe dans une liste (une liste avec des millions de valeurs) et que son indice est? Je sais que toutes les valeurs de la liste sont uniques comme mon exemple.

Mes premières méthodes que j'essaie est(3.8 sec dans mon vrai code):

a = [4,2,3,1,5,6]

if a.count(7) == 1:
    b=a.index(7)
    "Do something with variable b"

Mon deuxième méthode j'ai essayer est (2x plus rapide:1.9 sec sur mon vrai code):

a = [4,2,3,1,5,6]

try:
    b=a.index(7)
except ValueError:
    "Do nothing"
Else:
    "Do something with variable b"

Proposition de méthodes de S. O. utilisateur (2.74 sec sur mon vrai code):

a = [4,2,3,1,5,6]
if 7 in a:
    a.index(7)

Dans mon vrai code , la première méthode prendre 3.81 sec et le second méthodes prennent 1.88 sec. C'est une bonne amélioration, mais:

Je suis débutant en Python/script et je veux savoir si d'une manière la plus rapide existe pas de faire les mêmes choses et d'économiser plus de temps de traitement?

Plus spécifique de l'explication de mon application:

Dans l'API de blender un peut accéder à une liste de particules:

particles = [1,2,3,4...etc.]

À partir de là , je peux accéder à son emplacement:

particles[x].location = [x,y,z]

Et je test pour chacune des particules si un voisin qui existe par la recherche dans l'emplacement de chaque particules comme:

if [x+1,y,z] in particles.location
    "find the identity of this neighbour particles in x:the index 
    of the particles array"
    particles.index([x+1,y,z])

2142voto

Rafe Kettler Points 29389
<pre><code></code><p>Façon plus claire et la plus rapide de le faire.</p><p><code></code>, mais construire que définir à partir de votre liste peut prendre plus de temps que les tests d’adhésion plus rapide permettra d’économiser. La seule façon d’être certain est de bien de référence. (cela dépend aussi de quelles opérations vous avez besoin)</p></pre>

69voto

NPE Points 169956

Vous pouvez mettre vos articles en set. Définir les recherches sont très efficaces.

Essayez:

s = set(a)
if 7 in s:
  # do stuff

modifier un commentaire, vous dites que vous aimeriez obtenir l'index de l'élément. Malheureusement, les jeux n'ont aucune notion de la position de l'élément. Une alternative est de pré-tri de votre liste, puis utilisez binaire de recherche chaque fois que vous devez trouver un élément.

34voto

Tiago Moutinho Points 467
<pre><code></code><p>avec cela vous pouvez trouver tout ce que la valeur souhaitée dans un tableau. C’est le meilleur moyen de savoir si une valeur choisie est dans un tableau.</p></pre>

19voto

Winston Ewert Points 17746
<pre><code></code><p>Ce sera seulement une bonne idée si un ne change et donc nous peut faire la part de dict() une fois et ensuite l’utiliser à plusieurs reprises. Si un changement de fait, fournir plus de détails sur ce que vous faites.</p></pre>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X