Hur får man tecken på heltal i Python


Bästa svaret

from math import copysign

sign = lambda x : copysign(1, x)

returnerar -1 för negativt tecken och +1 för positivt tecken. Du kan ersätta 1 med 1. för att få en flytpunktsutgång

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

sign(10) # 1

sign(-32) #0

sign(o) #1

sign(10**15) #1L

om du bara har siffror som kan representeras som 32 tum räcker det att göra x >> 31 men då får du siffror större än ett för siffror med mer än 32 bitar (465662 för tecken (10 ** 15)). Du kan också göra x >> 128 för att vara säkrare

Svar

Här är en linje! sign = lambda a: (a>0) - (a<0) ELLER sign = lambda a: (a>>127)|(not not a) ELLER sign = lambda a: 1 if a>0 else -1 if a<0 else 0 [använder if-else, OP bad inte om detta men för läsare]

Alla lösningar fungerar i både Python2 och 3 testfall

print sign(12)

print sign(0)

print sign(-13)

print sign(-0)

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *