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