Pythonで整数の符号を取得する方法


ベストアンサー

from math import copysign

sign = lambda x : copysign(1, x)

は、負の符号の場合は-1を返し、正の符号の場合は+1を返します。 1を1に置き換えると、浮動小数点出力を取得できます

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

sign(10) # 1

sign(-32) #0

sign(o) #1

sign(10**15) #1L

32 intとして表すことができる数値しかない場合は、x >> 31を実行するだけで十分ですが、32を超える数値の場合は1より大きい数値が得られます。ビット(符号(10 ** 15)の場合は465662)。より安全にするためにx >> 128を実行することもできます

回答

ここに1つのライナーがあります! sign = lambda a: (a>0) - (a<0)またはsign = lambda a: (a>>127)|(not not a)またはsign = lambda a: 1 if a>0 else -1 if a<0 else 0 [if-elseを使用すると、OPは要求しませんでしたこれは読者向けです]

すべてのソリューションはPython2と3の両方のテストケースで機能しますテストケース

print sign(12)

print sign(0)

print sign(-13)

print sign(-0)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です