Given a sorted list
and a number n
, find the index in the list that precedes n
in the most efficient (fastest) way.
sorted list example:
x_list = [1, 3.5, 5, 9.2, 20, 50.75]
number n
, say n = 7.5
Example answer: the index of the value in the list that precedes n
is 2
.
This is what i have tried so far:
x_list = [1, 3.5, 5, 9.2, 20, 50.75]
n = 7.5
for i, v in enumerate(x_list):
if v < n: xlow = i
else: break
print(xlow)
Can i do a quicker find than the above method ?
Note:
This list is sorted
whereas other questions of the same nature are unsorted
.
CodePudding user response:
You can use bisect
to perform a binary search:
import bisect
n = 7.5
index = bisect.bisect_left(x_list, n)-1
output: 2
NB. In case the target is before the first index, this will return -1
, which you can avoid using max(0, bisect.bisect_left(x_list, n)-1)
if needed.