Позиционировать элемент в упорядоченном списке в логарифмическом времени Python - PullRequest
3 голосов
/ 01 апреля 2012

У меня есть отсортированный список, и мне нужно расположить элемент в этом списке так, чтобы предыдущий элемент был <=, а следующий элемент в списке был> (список представляет собой список чисел с плавающей запятой)

Мне нужно будет вернуть позицию элемента, которая <= т.е. предыдущий элемент </p>

, как я могу реализовать это в логарифмическом времени.Я подумал об использовании метода, похожего на двоичный seacrh, но не смог заставить его работать

Любая помощь будет оценена

PS Пример: если список

testlist=[0.0, 0.25, 0.5, 0.75, 1.0]

и я запускаю функцию для 0,27, функция вернет 1 (местоположение 0,25), и если я запусту ее для 0,5, она вернет 2

1 Ответ

3 голосов
/ 01 апреля 2012

Существует специальный модуль для бинарного поиска: bisect

import bisect

testlist=[0.0, 0.25, 0.5, 0.75, 1.0]
print bisect.bisect(testlist, .27) - 1
## 1
...