Najszybszy sposób na sprawdzenie, czy wartość istnieje na liście
Jaki jest najszybszy sposób, aby dowiedzieć się, czy dana wartość istnieje na liście (lista z milionami wartości) i jaki jest jej indeks?
Wiem, że wszystkie wartości na liście są unikalne, jak w tym przykładzie.
Pierwsza metoda, którą próbuję, to (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"
Druga metoda, którą wypróbowuję jest (2x szybsza: 1.9 sek w moim prawdziwym kodzie):
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 Stack Overflow (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 s, a druga metoda zajmuje 1,88 s. To'jest dobra poprawa, ale:
I'm początkujący z Pythonem / skryptami, i czy istnieje szybszy sposób na zrobienie tych samych rzeczy i zaoszczędzenie więcej czasu przetwarzania?
Bardziej szczegółowe wyjaśnienie dla mojej aplikacji: .
W API Blendera mogę uzyskać dostęp do listy cząsteczek:
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 testuję, czy istnieje sąsiad, przeszukując lokalizację każdej cząstki 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])
Najczystszy i najszybszy sposób na zrobienie tego.
Możesz również rozważyć użycie
set
, ale skonstruowanie tego zestawu z twojej listy może zająć więcej czasu niż szybsze testowanie członkostwa zaoszczędzi. Jedynym sposobem, aby być pewnym, jest dobre benchmarkowanie. (to również zależy od tego, jakich operacji potrzebujesz)Możesz umieścić swoje elementy w
set
. Odszukiwanie zbiorów jest bardzo wydajne.Spróbuj:
edit W komentarzu piszesz, że chciałbyś uzyskać indeks elementu. Niestety, zestawy nie mają pojęcia pozycji elementu. Alternatywą jest wstępne posortowanie listy, a następnie użycie binary search za każdym razem, gdy musisz znaleźć element.
Użycie
Uważam, że jest to najszybszy sposób, aby dowiedzieć się, czy wybrana wartość znajduje się w tablicy.