def binary_search(a, x):
    lo = 0
hi = len(a)
while lo < hi:
    mid = (lo + hi) // 2
midval = a[mid]
if midval < x:
    lo = mid + 1
elif midval > x:
    hi = mid
else:
    return mid
return lo - 1 if lo > 0 else 0
Python/Numpy — быстрый поиск индекса в массиве, ближайшего к некоторому значению