Was ist der schnellste Weg, um festzustellen, ob ein Wert in einer Liste vorhanden ist (eine Liste mit Millionen von Werten) und wie der Index lautet?
Ich weiß, dass alle Werte in der Liste wie in diesem Beispiel eindeutig sind.
Die erste Methode, die ich versuche, ist (3,8 Sekunden in meinem realen Code):
a = [4,2,3,1,5,6]
if a.count(7) == 1:
b=a.index(7)
"Do something with variable b"
Die zweite Methode, die ich versuche, ist (2x schneller: 1,9 Sekunden für meinen echten Code):
a = [4,2,3,1,5,6]
try:
b=a.index(7)
except ValueError:
"Do nothing"
else:
"Do something with variable b"
Vorgeschlagene Methoden vom Stack Overflow-Benutzer (2,74 Sek. Für meinen echten Code):
a = [4,2,3,1,5,6]
if 7 in a:
a.index(7)
In meinem realen Code dauert die erste Methode 3,81 Sekunden und die zweite Methode 1,88 Sekunden. Es ist eine gute Verbesserung, aber:
Ich bin ein Anfänger mit Python / Scripting und gibt es eine schnellere Möglichkeit, die gleichen Dinge zu tun und mehr Verarbeitungszeit zu sparen?
Spezifischere Erklärung für meine Anwendung:
In der Blender-API kann ich auf eine Liste von Partikeln zugreifen:
particles = [1, 2, 3, 4, etc.]
Von dort aus kann ich auf die Position eines Partikels zugreifen:
particles[x].location = [x,y,z]
Und für jedes Partikel teste ich, ob ein Nachbar existiert, indem ich jeden Partikelort wie folgt suche:
if [x+1,y,z] in particles.location
"Find the identity of this neighbour particle in x:the particle's index
in the array"
particles.index([x+1,y,z])
bisect
Modul