我有5个范围:
1-50 ---> "range1"
51-100 ---> "range2"
101-150 ---> "range3"
151-200 ---> "range4"
201-250 ---> "range5"
范围不重叠,每个范围都有下限和上限,下一个范围从前一个范围结束开始。我决定了范围长度。它们的大小可能不相等。
我有一个显示数字的变量,例如
x = 153
如果x介于1和50之间,则应返回“range1”,如果介于51和100之间,则返回“range2”,依此类推。 考虑到可能有超过5个范围,并且数量很大,在python中执行此操作的最快方法是什么?
答案 0 :(得分:1)
由于您的范围严格相邻且按递增顺序排列,因此您可以使用二分法:
from bisect import bisect
ranges = [1, 51, 101, 151, 201]
if 0 < x <= 250:
print('range{}'.format(bisect(ranges, x))
else:
print('Out of bounds')
Bisection采用O(logN)步骤来找出N种可能性中的匹配范围。