[英]How to check if a number is in a interval
假設我得到了:
first_var = 1
second_var = 5
interval = 2
我想要second_var的間隔,如second_var ± interval
(從3到7)。 我想知道first_var是否在那段時間內。 所以在這種特殊情況下我想要False
如果first_var = 4
,我想要True
我可以做這個:
if (first_var > second_var-interval) and (first_var < second_var+interval):
#True
是否有更多的pythonic方式來做到這一點?
您可以使用類似數學的序列,因為Python支持它
if (second_var-interval < first_var < second_var+interval):
# True
請注意,python中的注釋以#
開頭
我使用帶__contains__
的類來表示間隔:
class Interval(object):
def __init__(self, middle, deviation):
self.lower = middle - abs(deviation)
self.upper = middle + abs(deviation)
def __contains__(self, item):
return self.lower <= item <= self.upper
然后我定義一個函數interval
來簡化語法:
def interval(middle, deviation):
return Interval(middle, deviation)
然后我們可以這樣稱呼它:
>>> 8 in interval(middle=6, deviation=2)
True
>>> 8 in interval(middle=6, deviation=1)
False
使用Python 2,這個解決方案比使用range
或xrange
更有效,因為它們沒有實現__contains__
並且它們必須搜索匹配的值。
Python 3更智能, range
是一個生成對象,它像xrange
一樣高效,但也實現__contains__
因此它不必搜索有效值。 Python 3中不存在xrange
。
此解決方案也適用於浮動。
另外,請注意,如果使用range
,則需要注意1分之一的錯誤。 最好將其封裝起來,如果你要做的不止一次或兩次。
你可以使用lambdas:
lmd = lambda fv, sv, inval: print('True') if \
sv - inval < fv < sv + inval else print('False')
並使用它像:
lmd(first_var, second_var, interval)
但它有點長!
if (first_var in range(second_var-interval, second_var+interval+1)):
#Do something
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.