Бинарный поиск (бисекция) в Python
Существует ли библиотечная функция, которая выполняет двоичный поиск по списку / кортежу и возвращает позицию элемента, если он найден, и значение «Ложь» (-1, нет и т. Д.), Если нет?
Я нашел функции bisect_left / right вмодуль деления пополам, но они по-прежнему возвращают позицию, даже если элемент отсутствует в списке. Это прекрасно для их предполагаемого использования, но я просто хочу знать, есть ли элемент в списке или нет (не хочу ничего вставлять).
Я думал об использованииbisect_left
и затем проверка, соответствует ли элемент в этой позиции тому, что я ищу, но это кажется громоздким (и мне также нужно проверить границы, может ли число быть больше, чем наибольшее число в моем списке). Если есть более хороший метод, я бы хотел узнать об этом.
редактировать Чтобы прояснить, для чего мне это нужно: я знаю, что словарь очень хорошо подойдет для этого, но я стараюсь максимально снизить потребление памяти. Мое предполагаемое использование было бы своего рода двусторонней справочной таблицей. У меня есть в таблице список значений, и мне нужно иметь возможность доступа к значениям на основе их индекса. А также я хочу иметь возможность найти индекс определенного значения или None, если значение отсутствует в списке.
Использование словаря для этого было бы самым быстрым способом, но (приблизительно) удвоило бы требования к памяти.
Я задавал этот вопрос, думая, что я что-то упустил из библиотек Python. Кажется, мне придется написать свой собственный код, как предложил Мо.