python 中的函数输出 -1 或 0 或 1

Function in python that outputs either -1 or 0 or 1

是否有类似(修改后的)轮函数,其中输出为 -1、0、1 取决于输入最接近的数字?例如。 0 => 0, -2154 => -1, 10 => 1

目前我正在使用普通的 if else 语句:

if (i==0):
    return 0
elif i > 0: 
    return 1
else:
    return -1

但是有什么方法可以使它成为一行代码吗?例如,通过使用一些修改过的 round 函数。

您可以使用numpy.sign()

import numpy as np

print(np.sign(1.2))
print(np.sign(-3.4))
print(np.sign(0))

输出:

1.0
-1.0
0

没有任何导入:

def sign(i):
    return (i>0) - (i<0)
    
print(sign(1))
print(sign(-3))
print(sign(0))

输出:

1
-1
0

正如其他答案评论的那样,您可以使用 numpy.sign() 方法轻松完成,直接 returns 您想要的结果。

但是,您可以直接使用内置的数学函数和方法 copysign(x, y) 来完成,它将第二个值的符号复制到第一个值。通过将第一个值设置为布尔值,如果原始值为 0,它将被解释为 0,否则将被解释为 1。然后我们复制值的符号,这会将 1 转换为 -1 或保持正数。

from math import copysign

values = [1, 200, 0, -3, 45, -15]

for value in values:
    print(int(copysign(bool(value), value)))

输出:

1
1
0
-1
1
-1

这是一个单行函数,使用普通的香草 python 并且没有导入。没有比这更简单的了。

def f(i):
    return -1 if i < 0 else int(bool(i))


In [5]: f(0)
Out[5]: 0

In [6]: f(1)
Out[6]: 1

In [7]: f(-5)
Out[7]: -1