Jaki jest najszybszy sposób sprawdzenia, czy wartość istnieje na liście (lista zawierająca miliony wartości) i jaki jest jej indeks?
Wiem, że wszystkie wartości na liście są unikalne, jak w tym przykładzie.
Pierwszą metodą, którą wypróbowałem, jest (3,8 s w moim prawdziwym kodzie):
a = [4,2,3,1,5,6]
if a.count(7) == 1:
b=a.index(7)
"Do something with variable b"
Drugą metodą, którą próbuję, jest (2x szybszy: 1,9 s dla mojego prawdziwego kodu):
a = [4,2,3,1,5,6]
try:
b=a.index(7)
except ValueError:
"Do nothing"
else:
"Do something with variable b"
Proponowane metody od użytkownika Przepełnienie stosu (2,74 s dla mojego prawdziwego kodu):
a = [4,2,3,1,5,6]
if 7 in a:
a.index(7)
W moim prawdziwym kodzie pierwsza metoda zajmuje 3,81 sekundy, a druga metoda 1,88 sekundy. To dobra poprawa, ale:
Jestem początkującym w Pythonie / skryptach i czy istnieje szybszy sposób na robienie tych samych rzeczy i oszczędność czasu?
Bardziej szczegółowe wyjaśnienie mojej aplikacji:
W interfejsie API Blendera mogę uzyskać dostęp do listy cząstek:
particles = [1, 2, 3, 4, etc.]
Stamtąd mogę uzyskać dostęp do lokalizacji cząsteczki:
particles[x].location = [x,y,z]
I dla każdej cząstki sprawdzam, czy sąsiad istnieje, przeszukując każdą lokalizację cząstek w ten sposób:
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