あなたはbisectモジュールを使用することができます。境界ケースのニーズを満たすために例を微調整する必要があるかもしれません。
>>> import bisect
>>> def RoundUpDown(rangeList,num):
beg = bisect.bisect_right(rangeList,num)
if rangeList[beg-1] == num: #Handle Perfect Hit Edge Case
return [num,num]
elif not beg: #Left Edge Case
return [None,rangeList[0]]
elif beg == len(rangeList): #Right Edge Case
return [rangeList[-1],None]
else:
return rangeList[beg-1:beg+1]
>>> RoundUpDown([5000, 7500, 10000, 20000, 30000, 40000, 50000],41000)
[40000, 50000]
>>> RoundUpDown([5000, 7500, 10000, 20000, 30000, 40000, 50000],5000)
[5000, 5000]
>>> RoundUpDown([5000, 7500, 10000, 20000, 30000, 40000, 50000],500)
[None, 5000]
>>> RoundUpDown([5000, 7500, 10000, 20000, 30000, 40000, 50000],50000)
[50000, 50000]
>>> RoundUpDown([5000, 7500, 10000, 20000, 30000, 40000, 50000],51000)
[50000, None]
>>> RoundUpDown([5000, 7500, 10000, 20000, 30000, 40000, 50000],7500)
[7500, 7500]
>>>
これは素晴らしいことです。 –
特に、(get_interval(5)は定義されていますか)エッジケースを扱うコードが必要です。 –
あなたの高速応答に感謝します。正確に私が必要なもの! – Daniel