Самый быстрый способ индексировать элемент в отсортированном списке в Python?

Списки Python имеют функцию list.index(elem) который, насколько мне известно, работает в O(N) времени. Однако, если я могу гарантировать, что список будет отсортирован, это все же лучший способ получить индекс элемента?

Будет ли бинарный поиск быстрее возвращать индекс? Кроме того, есть ли способ заставить стандартную библиотеку python выполнять бинарный поиск по индексу элемента в списке?

1 ответ

Решение

Да, бинарный поиск, как правило, будет быстрее. Нет, стандартная библиотека index Функция не имеет возможности для этого.

Другой ответ имеет код для бинарного поиска:

from bisect import bisect_left

def binary_search(a, x, lo=0, hi=None):   # can't use a to specify default for hi
    hi = hi if hi is not None else len(a) # hi defaults to len(a)   
    pos = bisect_left(a,x,lo,hi)          # find insertion position
    return (pos if pos != hi and a[pos] == x else -1) # don't walk off the end
Другие вопросы по тегам