Czy istnieje funkcja biblioteki, która wykonuje wyszukiwanie binarne na liście / krotce i zwraca pozycję elementu, jeśli zostanie znaleziona, i „Fałsz” (-1, Brak itd.), Jeśli nie?
Znalazłem funkcje bisect_left / right w module bisect , ale nadal zwracają pozycję, nawet jeśli elementu nie ma na liście. Jest to całkowicie w porządku dla ich zamierzonego zastosowania, ale chcę tylko wiedzieć, czy element znajduje się na liście, czy nie (nie chcę niczego wstawiać).
Pomyślałem o użyciu, bisect_left
a następnie sprawdzeniu, czy pozycja na tej pozycji jest równa temu, czego szukam, ale wydaje się to kłopotliwe (a także muszę sprawdzić, czy liczba może być większa niż największa liczba na mojej liście). Jeśli istnieje ładniejsza metoda, chciałbym się o tym dowiedzieć.
Edytuj Aby wyjaśnić, do czego to jest potrzebne: zdaję sobie sprawę, że słownik bardzo by się do tego nadawał, ale staram się, aby zużycie pamięci było jak najniższe. Moje zamierzone użycie to rodzaj dwukierunkowej tabeli przeglądowej. Mam w tabeli listę wartości i muszę mieć dostęp do wartości na podstawie ich indeksu. Chcę też móc znaleźć indeks określonej wartości lub Brak, jeśli wartość nie znajduje się na liście.
Wykorzystanie do tego słownika byłoby najszybszym sposobem, ale (w przybliżeniu) podwoiłoby wymagania dotyczące pamięci.
Zadałem to pytanie, myśląc, że być może przeoczyłem coś w bibliotekach Pythona. Wygląda na to, że będę musiał napisać własny kod, jak zasugerował Moe.
np.searchsorted
jest przydatny. docs.scipy.org/doc/numpy/reference/generated/…