de-vraag
  • Pytania
  • Tagi
  • Użytkownicy
Powiadomienia
Nagrody
Rejestracja
Po zarejestrowaniu się, będziesz otrzymywać powiadomienia o odpowiedziach i komentarzach do swoich pytań.
Zaloguj się
Brak tłumaczeń pasujących do Twojego wyszukiwania Jeśli masz już konto, zaloguj się, aby sprawdzić nowe powiadomienia.
Za dodane pytania, odpowiedzi i komentarze przewidziane są nagrody.
Więcej
Źródło
Edytuj
Jean-Francois Gallant
Jean-Francois Gallant
Question

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])
725 2011-09-27T15:23:26+00:00 3
Élio Pereira
Élio Pereira
Edytowane pytanie 1. października 2019 в 5:59
Programowanie
python
list
performance
To pytanie ma 1 odpowiedź w języku angielskim, aby je przeczytać zaloguj się na swoje konto.
Solution / Answer
Rafe Kettler
Rafe Kettler
27. września 2011 в 3:25
2011-09-27T15:25:11+00:00
Więcej
Źródło
Edytuj
#13478527
7 in a

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)

Rafe Kettler
Rafe Kettler
Edytowana odpowiedź 27. września 2011 в 3:57
1411
0
 NPE
NPE
27. września 2011 в 3:25
2011-09-27T15:25:12+00:00
Więcej
Źródło
Edytuj
#13478528

Możesz umieścić swoje elementy w set. Odszukiwanie zbiorów jest bardzo wydajne.

Spróbuj:

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

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.

 Community
Community
Edytowana odpowiedź 23. maja 2017 в 12:02
32
0
Tiago Moutinho
Tiago Moutinho
27. września 2011 в 3:33
2011-09-27T15:33:49+00:00
Więcej
Źródło
Edytuj
#13478529
def check_availability(element, collection: iter):
    return element in collection

Użycie

check_availability('a', [1,2,3,4,'a','b','c'])

Uważam, że jest to najszybszy sposób, aby dowiedzieć się, czy wybrana wartość znajduje się w tablicy.

Şafak Gezer
Şafak Gezer
Edytowana odpowiedź 11. sierpnia 2018 в 12:52
31
0
Dodaj pytanie
Kategorie
Wszystkie
Technologia
Kultura / Rekreacja
Życie / Sztuka
Nauka
Profesjonalny
Biznes
Użytkownicy
Wszystkie
Nowy
Popularny
1
Zuxriddin Muydinov
Zarejestrowany 13 godzin temu
2
Денис Анненский
Zarejestrowany 2 dni temu
3
365
Zarejestrowany 1 tydzień temu
4
True Image
Zarejestrowany 1 tydzień temu
5
archana agarwal
Zarejestrowany 1 tydzień temu
BG
DA
DE
EL
ES
FI
FR
ID
IT
JA
KO
NL
PL
PT
RU
SK
SL
SV
TR
ZH
© de-vraag 2022
Źródło
stackoverflow.com
na podstawie licencji cc by-sa 3.0 z przypisaniem