Paras vastaus
from math import copysign
sign = lambda x : copysign(1, x)
palauttaa -1 negatiiviselle merkille ja +1 positiiviselle merkille. voit korvata 1: llä 1. saada liukulukuulostus
sign = lambda x : (x >> 63) +1
sign(10) # 1
sign(-32) #0
sign(o) #1
sign(10**15) #1L
jos sinulla on vain numeroita, jotka voidaan edustaa 32 tuumana, riittää, että tehdään x >> 31, mutta sitten saat numeroita, jotka ovat suurempia kuin yksi, jos numero on yli 32 bittiä (465662 merkille (10 ** 15)). Voit myös tehdä x >> 128 turvallisemmaksi.
Vastaa
Tässä on yksi vuoraus! sign = lambda a: (a>0) - (a<0)
TAI sign = lambda a: (a>>127)|(not not a)
TAI sign = lambda a: 1 if a>0 else -1 if a<0 else 0
[if-else: n avulla, OP ei pyytänyt tämä mutta lukijoille]
Kaikki ratkaisut toimivat sekä Python2- että 3 -tapauksessa
print sign(12)
print sign(0)
print sign(-13)
print sign(-0)