2016-04-22 48 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

相關問題