我将序言,这完全是为了满足我的好奇心,而不是在编码项目上需要帮助。但我想知道是否有人知道某个函数(特别是在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没有被评估两次,我会很好用这样的解决方案。所以,如果有任何人有任何解决方案,我会很感激。
由于
答案 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)