2016-04-22 62 views
0

我有5个范围:什么是最快的方式来检查一个数字是否在python的特定范围内?

1-50 ---> "range1" 
51-100 ---> "range2" 
101-150 ---> "range3" 
151-200 ---> "range4" 
201-250 ---> "range5" 

范围不重叠,每个范围具有其中先前的一端下限和上限,下一个范围开始。我决定范围的长度。它们的大小可能不相同。

我有一个变量,它显示了许多,例如

x = 153 

如果x为1和50之间,那么它应该返回“范围1”,如果51和100,然后“范围2”之间,等。 在python中最快的方法是什么?考虑到可能有5个以上的范围,并且数量很大?

+0

这些数字更可能在某些已知范围内而不是在其他范围内? – rightfold

+0

不,该数字可能在任何范围内,具有相同的概率。 – alwbtc

+0

你如何得到这些范围?他们是2个整数?它们重叠吗?是范围稀疏? – karina

回答

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') 

二分法需要O(logN)的步骤,以找到匹配的范围从N个可能性。

+0

这只适用于如果范围对抗eachother这样的... @alwbtc是这种情况? – karina

+0

这比使用传统的'if'循环更快吗? – alwbtc

+0

@ karina是的,他们是互相对立的。 – alwbtc

相关问题