Я пишу этот фрагмент кода, в котором я использовал функцию bisect_left из модуля bisect, который является сторонним модулем Python. Я использую его только с двумя параметрами, т.е. sorted_list и target (тот, для которого мне нужно найти подходящее значение индекса).
Проблема заключается в следующем: если моя цель больше, чем сумма наименьшего значения и Наивысшее значение, функция возвращает индекс = len (sorted_li), из-за которого я получаю ошибку индекса. Я могу использовать try и кроме, но более того, мне любопытно узнать, почему он так себя ведет.
Ниже приведен мой код:
from bisect import bisect_left
li = [10,15,3,6,10]
k = 19
def binary_search(sorted_list,target):
index = bisect_left(sorted_list,target)
print(index)
if sorted_list[index] == target:
return index
else:
return False
def function(sorted_li,k):
"""
Given a list of numbers and a number k, return whether any two numbers from the list add up to k.
For example, given [10, 15, 3, 7] and k of 17, return true since 10 + 7 is 17.
"""
print(sorted_li)
for i in range(len(sorted_li)):
print('Next iteration')
print(sorted_li[i])
target = k - sorted_li[i]
j = binary_search(sorted_li,target)
if j:
if j != i:
print(sorted_li[i])
print(sorted_li[j])
return True
else:
if j + 1 < len(sorted_li):
if sorted_li[j+1] == target:
print(sorted_li[i])
print(sorted_li[j+1])
return True
if j - 1 > 0:
if sorted_li[j-1] == target:
print(sorted_li[i])
print(sorted_li[j-1])
return True
return False
if __name__ == "__main__":
li.sort()
a = function(li,k)
print(a)
Вывод выглядит следующим образом:
sum (li's lowest + li's greatest)">
но когда я меняю k на 18, код работает нормально, вывод выглядит следующим образом:
Я пробовал разные наборы чисел для одного и того же. Выход остается прежним.