Python: Mapping from intervals to values

Agos picture Agos · Jul 29, 2009 · Viewed 8.6k times · Source

I'm refactoring a function that, given a series of endpoints that implicitly define intervals, checks if a number is included in the interval, and then return a corresponding (not related in any computable way). The code that is now handling the work is:

if p <= 100:
    return 0
elif p > 100 and p <= 300:
    return 1
elif p > 300 and p <= 500:
    return 2
elif p > 500 and p <= 800:
    return 3
elif p > 800 and p <= 1000:
    return 4
elif p > 1000:
    return 5

Which is IMO quite horrible, and lacks in that both the intervals and the return values are hardcoded. Any use of any data structure is of course possible.

Answer

Glenn Maynard picture Glenn Maynard · Jul 29, 2009
import bisect
bisect.bisect_left([100,300,500,800,1000], p)

here the docs: bisect