Qual è il modo più veloce per sapere se esiste un valore in un elenco (un elenco con milioni di valori in esso) e qual è il suo indice?
So che tutti i valori nell'elenco sono unici come in questo esempio.
Il primo metodo che provo è (3,8 secondi nel mio codice reale):
a = [4,2,3,1,5,6]
if a.count(7) == 1:
b=a.index(7)
"Do something with variable b"
Il secondo metodo che provo è (2 volte più veloce: 1,9 secondi per il mio codice reale):
a = [4,2,3,1,5,6]
try:
b=a.index(7)
except ValueError:
"Do nothing"
else:
"Do something with variable b"
Metodi proposti dall'utente Stack Overflow (2.74 sec per il mio codice reale):
a = [4,2,3,1,5,6]
if 7 in a:
a.index(7)
Nel mio codice reale, il primo metodo richiede 3,81 secondi e il secondo metodo richiede 1,88 secondi. È un buon miglioramento, ma:
Sono un principiante con Python / scripting e c'è un modo più veloce per fare le stesse cose e risparmiare più tempo di elaborazione?
Spiegazione più specifica per la mia applicazione:
Nell'API di Blender posso accedere a un elenco di particelle:
particles = [1, 2, 3, 4, etc.]
Da lì, posso accedere alla posizione di una particella:
particles[x].location = [x,y,z]
E per ogni particella collaudo se esiste un vicino cercando ogni posizione delle particelle in questo modo:
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
modulo