27

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

伪代码:

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

同样,不是出于复杂性而提出问题,只是出于好奇。我现在需要它几次,想知道我是否真的需要编写自己的函数,或者是否已经存在。如果没有执行此操作的函数,是否有一种方法可以使用不会计算两次的表达式将其写在一行中。

IE

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

如果 xy 没有被评估两次,我会接受这样的解决方案。因此,如果有人有任何解决方案,我将不胜感激。

谢谢

4

4 回答 4

69

单程...

>>> max(0, x)
于 2012-10-04T13:17:50.787 回答
17

这应该这样做:

max(x-y, 0)
于 2012-10-04T13:17:41.883 回答
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

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

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

于 2012-10-04T13:33:28.663 回答
0

另一种表达方式是

x -= min(x, y)
于 2021-03-21T14:11:55.080 回答