在python中如果x <0递增x并在x> 0时递减x的优雅方法?

时间:2019-03-13 01:01:28

标签: python-3.x

我的值在-5到5之间,并且需要以1的增量将其向0偏移。是否有一种优雅的方法可以做到这一点,而无需使用if和elif语句?

3 个答案:

答案 0 :(得分:3)

x += (x < 0) * 2 - 1

应该这样做。当然,它太聪明了,没人会理解,使用if语句会更好。

之所以可行,是因为(x < 0)创建了一个布尔结果,并且布尔值可以替换False = 0和True = 1的整数。

如果您需要通过完全不更改来处理x = 0的情况,这是一个简单的修改:

x += (x < 0) * 2 - (x != 0)

如果您实际上并没有完全避免使用if,那么Python方式将是:

x += 1 if x < 0 else -1

答案 1 :(得分:3)

这应该足够好:

x += 1 if x < 0 else -1

答案 2 :(得分:1)

Python没有signum函数,但是有copysign,这是下一个最好的东西:

import math
math.copysign(abs(x)-1, x)