PooH
Я дико извиняюсь, но двоичный поиск уже реализован в стандартном модуле bisect, да еще и на C. Не бог весть сколько кода, но все-таки к чему изобретать велосипед?!
Хм… во время гугления работы со списками я его заметил, но не совсем понял как применять в нашем случае, там по сути две функции bisect.bisect(а, item) - возвращает индекс элемента item который в случае его добавления в список, и вторая функция bisect.insort - его туда добавляет, и как он может нам помочь? Разве что проверять элемент слева в случае добавления справа, то есть:
m = bisect.bisect(list,item)
if list[m-1] == item:
...
Но это как-то странно выглядит.