I was surprised to see that python's bisect.bisect_left was faster than the numpy equivalent numpy.searchsorted. Is that related to the distribution of values I used or will this remain true for any input?
>>> input_size = 10**3
>>> input_list = sorted([random.uniform(0, 300) for _ in range(input_size)])
>>> numpy_input = np.array(input_list)
>>> %timeit index = bisect.bisect_left(input_list, 100)
434 ns ± 6.17 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
>>> %timeit index = np.searchsorted(numpy_input, 100)
1.8 µs ± 21.8 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Python is on version 3.8.0 and numpy on version 1.18.4.