우수 답변
from math import copysign
sign = lambda x : copysign(1, x)
는 음수 부호에 대해 -1을 반환하고 양수 부호에 대해 +1을 반환합니다. 1을 1로 대체하여 부동 소수점 출력을 얻을 수 있습니다.
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
32 개의 정수로 표현할 수있는 숫자 만있는 경우 x >> 31을 수행하는 것으로 충분하지만 32 이상의 숫자에 대해 1보다 큰 숫자를 얻습니다. 비트 (부호 (10 ** 15)의 경우 465662). 안전을 위해 x >> 128을 할 수도 있습니다.
답변
여기에 라이너가 하나 있습니다! sign = lambda a: (a>0) - (a<0)
또는 sign = lambda a: (a>>127)|(not not a)
또는 sign = lambda a: 1 if a>0 else -1 if a<0 else 0
[if-else 사용, OP에서 요청하지 않음 하지만 독자 용]
모든 솔루션은 Python2 및 3 테스트 사례 모두에서 작동합니다.
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)