Az egész szám előjele a Pythonban


Legjobb válasz

from math import copysign

sign = lambda x : copysign(1, x)

-1-et ad vissza negatív előjelként és +1-et pozitív előjelként. lebegőpontos kimenetet kaphat

sign = lambda x : (x >> 63) +1

sign(10) # 1

sign(-32) #0

sign(o) #1

sign(10**15) #1L

ha csak 32 inttal ábrázolható számok vannak, akkor elegendő megtenni az x >> 31 értéket, de akkor 32-nél nagyobb számoknál egynél nagyobb számokat kap bit (465662 a jelhez (10 ** 15)). X >> 128-at is tehet biztonságosabbá

Válasz

Itt van egy bélés! sign = lambda a: (a>0) - (a<0) VAGY sign = lambda a: (a>>127)|(not not a) VAGY sign = lambda a: 1 if a>0 else -1 if a<0 else 0 [if-else használatával az OP nem kérte ez, de az olvasók számára]

Minden megoldás működik mind a Python2, mind a 3 tesztesetben

print sign(12)

print sign(0)

print sign(-13)

print sign(-0)

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük