如何将数字限制在指定范围内?(蟒蛇)

Man*_*gan 44 python max min

我想将数字限制在一定范围内.目前,我正在做以下事情:

minN = 1
maxN = 10
n = something() #some return value from a function
n = max(minN, n)
n = min(maxN, n)
Run Code Online (Sandbox Code Playgroud)

这使得它中minNmaxN,但它并没有看起来非常漂亮.我怎么能做得更好?

PS:仅供参考,我使用的是Python 2.6.

Adr*_*son 56

def clamp(n, minn, maxn):
    return max(min(maxn, n), minn)
Run Code Online (Sandbox Code Playgroud)

或功能相当:

clamp = lambda n, minn, maxn: max(min(maxn, n), minn)
Run Code Online (Sandbox Code Playgroud)

现在,您使用:

n = clamp(n, 7, 42)
Run Code Online (Sandbox Code Playgroud)

或者说得非常清楚:

n = minn if n < minn else maxn if n > maxn else n
Run Code Online (Sandbox Code Playgroud)

更清楚:

def clamp(n, minn, maxn):
    if n < minn:
        return minn
    elif n > maxn:
        return maxn
    else:
        return n
Run Code Online (Sandbox Code Playgroud)

  • `deflamp(n,minn,maxn):return min(max(n,minn),maxn)`可以以相同顺序稍微提高参数的可读性。 (2认同)

Bjö*_*örn 45

只需使用numpy.clip()(doc):

n = np.clip(n, minN, maxN)
Run Code Online (Sandbox Code Playgroud)

它也适用于整个数组:

my_array = np.clip(my_array, minN, maxN)
Run Code Online (Sandbox Code Playgroud)


Ste*_*ard 42

如果你想变得可爱,你可以这样做:

n = sorted([minN, n, maxN])[1]
Run Code Online (Sandbox Code Playgroud)

  • 这就是为什么我把它称为"可爱"而不是"实用".;)但是,在大多数情况下,此代码的低效率极不可能导致有意义的性能问题. (11认同)
  • 哇,真的好可爱!我也喜欢它在 minN 和 maxN 互换下的不变性。这绝对是我最喜欢的钳位功能。+1 ^_^ (2认同)