Beste Antwort
from math import copysign
sign = lambda x : copysign(1, x)
gibt -1 für negatives Vorzeichen und +1 für positives Vorzeichen zurück. Sie können 1 durch 1 ersetzen, um eine Gleitkommaausgabe zu erhalten.
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
Wenn Sie nur Zahlen haben, die als 32 Zoll dargestellt werden können, reicht es aus, x >> 31 auszuführen, aber dann erhalten Sie Zahlen größer als eins für Zahlen mit mehr als 32 Bits (465662 für Vorzeichen (10 ** 15)). Sie können auch x >> 128 ausführen, um sicherer zu sein.
Antwort
Hier sind ein Liner! sign = lambda a: (a>0) - (a<0)
ODER sign = lambda a: (a>>127)|(not not a)
ODER sign = lambda a: 1 if a>0 else -1 if a<0 else 0
[mit if-else hat OP nicht gefragt dies nur für Leser]
Alle Lösungen funktionieren sowohl in Python2- als auch in 3 -Testfällen
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)