Pythonで整数の最小値と最大値を探しています。たとえば、Javaでは、とがInteger.MIN_VALUE
ありInteger.MAX_VALUE
ます。Pythonでこのようなものはありますか?
sys.maxint
の最大値であるため、すべての値がより大きいリストを作成できることを除いてint
、Pythonは暗黙的にに昇格しますlong
。
float('inf')
など)float('-inf')
は、非常に役立ちます。
Pythonで整数の最小値と最大値を探しています。たとえば、Javaでは、とがInteger.MIN_VALUE
ありInteger.MAX_VALUE
ます。Pythonでこのようなものはありますか?
sys.maxint
の最大値であるため、すべての値がより大きいリストを作成できることを除いてint
、Pythonは暗黙的にに昇格しますlong
。
float('inf')
など)float('-inf')
は、非常に役立ちます。
回答:
Python 3では、この質問は当てはまりません。プレーンint
タイプは無限です。
ただし、実際のインタプリタのワードサイズに関する情報を実際に探している可能性があります。これは、ほとんどの場合、マシンのワードサイズと同じです。その情報はPython 3でも引き続き使用できますsys.maxsize
。これは、署名された単語で表現できる最大値です。同様に、可能な最大のリストまたはメモリ内シーケンスのサイズです。
一般に、符号なしワードで表現できる最大値sys.maxsize * 2 + 1
は、ワード内のビット数はになりますmath.log2(sys.maxsize * 2 + 2)
。詳細については、この回答を参照してください。
Python 2では、プレーンint
値の最大値は次のように使用できますsys.maxint
。
>>> sys.maxint
9223372036854775807
ここに-sys.maxint - 1
示すようにを使用して最小値を計算できます。
この値を超えると、Pythonはプレーン整数からロング整数にシームレスに切り替えます。ほとんどの場合、それを知る必要はありません。
2^63 - 1
ので、64ビットのintを持っています。一般に、nビット整数には、-2^(n-1)
〜の範囲の値があります2^(n-1) - 1
。
2^31 - 1
、Pythonはlong
データ型を使用して64ビットにシームレスにジャンプしますが、sys.maxintはを返します。
sys.maxsize
代わりに、@ Akash Ranaの提案に従って使用してください。ドキュメントが言うようにsys
、Python 2にも存在します。これにより、コードは両方のPythonバージョンとの互換性が向上します。
2to3
は、ほとんどの場合何も壊さない素早いダーティヒューリスティックですが、これら2つの値の違いは重要です。ベストプラクティスは、実際に使用する値を使用することです。Python 2で本当に必要な 場合はsys.maxint
、Python 3ではもう必要ありませんsys.maxsize
。完全に削除し、に変更する必要はありません。
他のすべてよりも大きい数が必要な場合は、
float('inf')
同様の方法で、他のすべてよりも小さい数:
float('-inf')
これはpython 2と3の両方で機能します。
x > x
は通常False
であり、無限大も例外ではありません。(float('NaN)
一方、...)
int
コーズには適用されませんcannot convert infinite float to int
...しかし、ほとんどの場合に機能します
int('inf')
動作しないことに注意してください。
このsys.maxint
定数はPython 3.0以降では削除されていますsys.maxsize
。代わりにを使用してください。
整数
- PEP 237:基本的に、長い名前はintに変更されました。つまり、intという名前の組み込み整数型は1つだけです。しかし、それはほとんど古いlong型のように動作します。
- PEP 238:1/2のような式は浮動小数点数を返します。1 // 2を使用して、切り捨て動作を取得します。(後者の構文は、少なくともPython 2.2以降、何年も存在しています。)
- 整数の値に制限がなくなったため、sys.maxint定数が削除されました。ただし、sys.maxsizeは、実際のリストまたは文字列インデックスよりも大きい整数として使用できます。これは、実装の「自然な」整数サイズに準拠し、通常、同じプラットフォーム上の以前のリリースのsys.maxintと同じです(同じビルドオプションを想定)。
- 長整数のrepr()には末尾のLが含まれないため、その文字を無条件に取り除くコードは、代わりに最後の桁を切り捨てます。(代わりにstr()を使用してください。)
- 8進数リテラルは0720の形式ではなくなりました。代わりに0o720を使用してください。
help(sys)
:maxsize-サポートされるコンテナの最大長。これは受け入れられる答えになるはずです。
Pythonでは整数は自動的に固定サイズから切り替わりますint
可変幅の中に表現long
しますが、値渡したら、表現sys.maxint
のいずれか2で、31 1または2 - 63ご使用のプラットフォームに応じて、1 - 。L
ここに追加されることに注意してください:
>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L
Pythonマニュアルから:
数値は、数値リテラルによって、または組み込み関数と演算子の結果として作成されます。無修飾の整数リテラル(2進数、16進数、8進数を含む)は、それらが表す値が大きすぎて単純な整数として表現できない場合を除いて、単純な整数を生成します。
'L'
または'l'
接尾辞付きの整数リテラルは、長整数を生成します(11に非常に似ている'L'
ため、これが推奨され1l
ます!)
Pythonは、その整数が数学的整数であり、制限がないと偽装しようと非常に努力しています。たとえば、googolを簡単に計算できます。
>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L
long
はJavaのようなものではなく、long
むしろに近いBigInteger
です。
L
サフィックスがないようです、そして、それは、数がどんなに大きくてint
もlong
、単にではなく、です。
Python 3の場合、
import sys
max = sys.maxsize
min = -sys.maxsize - 1
sys.maxint
、Python 3(tl; dr: " sys.maxint
定数は削除されました(python3))には存在しません。整数の値に制限がなくなったためです。ただし、sys.maxsize
実際のリストや文字列よりも大きい整数として使用できます。インデックス」)
min()
and などの組み込みをシャドウする変数を作成するのはなぜmax()
ですか?
min = ~sys.maxsize
math.inf
相当することに注意してくださいfloat('inf')
配列またはリストのインデックスの最大値が必要な場合(size_t
C / C ++ と同等)、numpyを使用できます。
np.iinfo(np.intp).max
これは同じsys.maxsize
ことですが、利点は、このためにインポートシステムを必要としないことです。
マシンのネイティブ整数の最大値が必要な場合:
np.iinfo(np.intc).max
docで他の使用可能なタイプを確認できます。
フロートの場合も使用できますsys.float_info.max
。
私はこのようなコマンドに大きく依存しています。
python -c 'import sys; print(sys.maxsize)'
返される最大整数:9223372036854775807
「sys」の詳細については、アクセスする必要があります
int
タイプは基本的long
にPython 2 のタイプと同じなので、最大値または最小値の概念はint
完全に消えます。それも、Pythonの2に基本的に無関係だ