在python中检查数字是否在特定范围内的最快方法是什么?

时间:2016-04-22 18:27:53

标签: python integer range

我有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中执行此操作的最快方法是什么?

1 个答案:

答案 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种可能性中的匹配范围。