Было бы намного лучше работать с индексами lower
и upper
, как Лассе В. Карлсен предлагал в комментарии к вопросу.код:
def binary_search(array, target):
lower = 0
upper = len(array)
while lower < upper: # use < instead of <=
x = lower + (upper - lower) // 2
val = array[x]
if target == val:
return x
elif target > val:
if lower == x: # these two are the actual lines
break # you're looking for
lower = x
elif target < val:
upper = x
lower < upper
остановится, как только вы достигнете меньшего числа (с левой стороны)номер (с правой стороны)
Пример:
>>> binary_search([1,5,8,10], 5) # return 1
1
>>> binary_search([1,5,8,10], 0) # return None
>>> binary_search([1,5,8,10], 15) # return None