Python에서 정수 부호를 얻는 방법


우수 답변

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)

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다