Бинарный поиск (бисекция) в Python

Существует ли библиотечная функция, которая выполняет двоичный поиск по списку / кортежу и возвращает позицию элемента, если он найден, и значение «Ложь» (-1, нет и т. Д.), Если нет?

Я нашел функции bisect_left / right вмодуль деления пополам, но они по-прежнему возвращают позицию, даже если элемент отсутствует в списке. Это прекрасно для их предполагаемого использования, но я просто хочу знать, есть ли элемент в списке или нет (не хочу ничего вставлять).

Я думал об использованииbisect_left и затем проверка, соответствует ли элемент в этой позиции тому, что я ищу, но это кажется громоздким (и мне также нужно проверить границы, может ли число быть больше, чем наибольшее число в моем списке). Если есть более хороший метод, я бы хотел узнать об этом.

редактировать Чтобы прояснить, для чего мне это нужно: я знаю, что словарь очень хорошо подойдет для этого, но я стараюсь максимально снизить потребление памяти. Мое предполагаемое использование было бы своего рода двусторонней справочной таблицей. У меня есть в таблице список значений, и мне нужно иметь возможность доступа к значениям на основе их индекса. А также я хочу иметь возможность найти индекс определенного значения или None, если значение отсутствует в списке.

Использование словаря для этого было бы самым быстрым способом, но (приблизительно) удвоило бы требования к памяти.

Я задавал этот вопрос, думая, что я что-то упустил из библиотек Python. Кажется, мне придется написать свой собственный код, как предложил Мо.

Ответы на вопрос(20)

Ваш ответ на вопрос