Having a list like this
[207, 357, 470, 497, 537]
where each number denotes the boundary of an interval (0 being implicit at the beginning of the list), what is a pythonic way of finding out to which interval a given number n belongs to?
So the intervals are
0: (0, 207)
1: (208, 357)
2: (358, 497)
3: (498, 537)
If n=0, then the corresponding interval is 0, for n=360, it’s 2.
Using the
bisectmodule of course:The module uses binary search, which requires a sorted sequence. With such a sequence you can divide the sequence in half by picking an index mid-way between the first and last, to see if the value you need is in either half. You then continue dividing the selected half until you found a matching insertion point. That lets you find the insertion point in O(log N) time for a sequence of length N, i.e. very fast.