Cel mai bun răspuns
from math import copysign
sign = lambda x : copysign(1, x)
va returna -1 pentru semnul negativ și +1 pentru semnul pozitiv. puteți înlocui 1 cu 1. pentru a obține o ieșire în virgulă mobilă
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
dacă aveți numai numere care pot fi reprezentate ca 32 de inți, va fi suficient să faceți x >> 31, dar atunci veți obține numere mai mari decât unul pentru numerele cu mai mult de 32 biți (465662 pentru semn (10 ** 15)). De asemenea, puteți face x >> 128 pentru a fi mai sigur
Răspundeți
Iată o linie! sign = lambda a: (a>0) - (a<0)
SAU sign = lambda a: (a>>127)|(not not a)
SAU sign = lambda a: 1 if a>0 else -1 if a<0 else 0
[folosind if-else, OP nu a cerut asta, dar pentru cititori]
Toate soluțiile funcționează atât în Python2 cât și în 3 cazuri de testare
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)