Вот способ, которым вы могли бы go об этом:
def _binary_search(arr, low, high, key):
mid = (high + low) // 2
if high - low <= 1:
return low
elif arr[mid] > key:
return _binary_search(arr, low, mid, key)
else:
return _binary_search(arr, mid, high, key)
def binary_search(arr, key):
"""
Wraps the actual recursive search function, setting initial bounds and
checking if the key was found or not.
"""
index = _binary_search(arr, 0, len(arr), key)
if arr[index] == key:
return index
return -1
def vectorised_binary_search(arr, key_arr):
return [binary_search(arr, key) for key in key_arr]
print(vectorised_binary_search([1, 3, 5, 8, 10], [0, 2, 8, 5]))
print(vectorised_binary_search(range(0, 10, 2), range(10)))
с выводом
[-1, -1, 3, 2]
[0, -1, 1, -1, 2, -1, 3, -1, 4, -1]
Я позволил себе немного переписать ваш бинарный поиск .