如何限制数字在指定范围内?(Python)

66 投票
5 回答
171378 浏览
提问于 2025-04-16 17:36

我想把一个数字限制在某个范围内。目前,我是这样做的:

minN = 1
maxN = 10
n = something() #some return value from a function
n = max(minN, n)
n = min(maxN, n)

这样可以把数字限制在 minNmaxN 之间,但看起来不是很好。有没有更好的方法?

顺便说一下,我使用的是 Python 2.6。

5 个回答

57

如果你想让你的代码看起来更可爱,可以这样做:

n = sorted([minN, n, maxN])[1]
83

简单来说,可以使用 numpy.clip() 这个函数(详细信息可以查看文档):

n = np.clip(n, minN, maxN)

这个函数也可以用在整个数组上:

my_array = np.clip(my_array, minN, maxN)
126
def clamp(n, minn, maxn):
    return max(min(maxn, n), minn)

或者功能上等价:

clamp = lambda n, minn, maxn: max(min(maxn, n), minn)

现在,你可以使用:

n = clamp(n, 7, 42)

或者让它非常清楚:

n = minn if n < minn else maxn if n > maxn else n

甚至更清楚:

def clamp(n, minn, maxn):
    if n < minn:
        return minn
    elif n > maxn:
        return maxn
    else:
        return n

撰写回答