减去除非否定然后返回0

时间:2012-10-04 13:14:18

标签: python math

我将序言,这完全是为了满足我的好奇心,而不是在编码项目上需要帮助。但我想知道是否有人知道某个函数(特别是在python中,但我会接受一个有效的数学概念)类似于绝对值,如果给定一个数字将返回0,如果为负数或返回该数字为正数。 / p>

伪代码:

def myFunc(x):
    if x > 0:
        return x
    else:
        return 0

同样,不是出于复杂性而只是好奇心问这个问题。我现在需要它几次,并且想知道我是否确实需要编写自己的功能或者是否已经存在。如果没有执行此操作的函数,是否有办法使用表达式在一行中写入此值不会计算两次。

myVar = x-y if x-y>0 else 0

如果x-y没有被评估两次,我会很好用这样的解决方案。所以,如果有任何人有任何解决方案,我会很感激。

由于

4 个答案:

答案 0 :(得分:51)

单程......

>>> max(0, x)

答案 1 :(得分:13)

这应该这样做:

max(x-y, 0)

答案 2 :(得分:2)

听起来像分析类型的问题。 numpy可以来救援!

如果您的数据包含在数组中:

x = np.arange(-5,11)
print x
[-5 -4 -3 -2 -1  0  1  2  3  4  5  6  7  8  9 10]

# Now do your subtraction and replacement.  
x[(x-y)>0] -= y
x[(x-y)<0]  = 0

如果我正确理解你的问题,你想用x替换x中x-y <0的值,否则用x-y替换。

注意,上面的解决方案适用于从数组中减去一个整数,或者在两个相等维度的数组上运行。然而,当处理两个相等长度的列表时,Daniel的解决方案更加优雅。这一切都取决于你的需求(以及你是否想冒险进入numpy世界)。

答案 3 :(得分:0)

另一种表达方式是

x -= min(x, y)