簡體   English   中英

如何檢查某個數字是否在某個區間內

[英]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,這個解決方案比使用rangexrange更有效,因為它們沒有實現__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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM