在Python中如何夹紧浮点数?

37
在Python 2.6中有没有内置函数可以做到这一点?
类似这样的东西:
clamp(myValue, min, max)
3个回答

63
Numpy的clip函数可以实现此操作。
>>> import numpy
>>> numpy.clip(10,0,3)
3
>>> numpy.clip(-4,0,3)
0
>>> numpy.clip(2,0,3)
2

2
这似乎非常慢。我猜这是因为这个函数本来是用于数组的。 - Micael Jarniac
1
@Micael:Numpy总是专为数组而设计的,它对于数组的操作比任何纯Python替代方案都要快。如果一个人担心纯Python的速度,通常意味着他们需要重新设计以使用数组、卸载或切换语言。 - Richard

58

没有这样的函数,但是

max(min(my_value, max_value), min_value)

就可以解决问题。


15
我总是喜欢这样排序,min(max(low, value), high)。并且将其视为low < value < high。然后它也可以被看作是一个“min-max”函数minmax(low, value, high)。 - johnb003

11

我认为问题已经得到解答,但如果有人需要的话,这里是一个替代 DIY 解决方案:

def clip(value, lower, upper):
    return lower if value < lower else upper if value > upper else value

(比 @Sven Marnach 的答案略快 - 即使在边界内也是如此)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接