Beste antwoord
from math import copysign
sign = lambda x : copysign(1, x)
retourneert -1 voor een minteken en +1 voor een positief teken. je kunt 1 vervangen door 1. om een uitvoer met drijvende komma te krijgen
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
als je alleen getallen hebt die kunnen worden weergegeven als 32 ints, is het voldoende om x >> 31 te doen, maar dan krijg je getallen groter dan één voor getallen met meer dan 32 bits (465662 voor teken (10 ** 15)). Je zou ook x >> 128 kunnen doen om veiliger te zijn
Antwoord
Hier zijn one liners! sign = lambda a: (a>0) - (a<0)
OF sign = lambda a: (a>>127)|(not not a)
OF sign = lambda a: 1 if a>0 else -1 if a<0 else 0
[met if-else, OP vroeg niet om dit maar voor lezers]
Alle oplossingen werken in zowel Python2 als 3 testcases
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)