intの最大値と最小値


745

Pythonで整数の最小値と最大値を探しています。たとえば、Javaでは、とがInteger.MIN_VALUEありInteger.MAX_VALUEます。Pythonでこのようなものはありますか?


14
Python 3では、intタイプは基本的longにPython 2 のタイプと同じなので、最大値または最小値の概念はint完全に消えます。それも、Pythonの2に基本的に無関係だ
AGF

8
@agf:さまざまな意味で関連性があります。たとえば、見つかった最小値を保存する必要があるアルゴリズム(並べ替えアルゴリズムなど)です。min値はsys.maxintで初期化できるため、最初に見つかった値はすべてminとして取得されることが保証されます
Basile Perrenoud

@Toasterは、Python 2での型sys.maxintの最大値であるため、すべての値がより大きいリストを作成できることを除いてint、Pythonは暗黙的にに昇格しますlong
agf 2014年

30
アルゴリズムで「非常に大きな値」を使用する必要がある場合(たとえば、ジェネリックコレクションの最小値または最大値を見つけるfloat('inf')など)float('-inf')は、非常に役立ちます。
geoff '25年

回答:


853

Python 3

Python 3では、この質問は当てはまりません。プレーンintタイプは無限です。

ただし、実際のインタプリタのワードサイズに関する情報を実際に探している可能性があります。これは、ほとんどの場合、マシンのワードサイズと同じです。その情報はPython 3でも引き続き使用できますsys.maxsize。これは、署名された単語で表現できる最大値です。同様に、可能な最大のリストまたはメモリ内シーケンスのサイズです。

一般に、符号なしワードで表現できる最大値sys.maxsize * 2 + 1は、ワード内のビット数はになりますmath.log2(sys.maxsize * 2 + 2)。詳細については、この回答を参照してください。

Python 2

Python 2では、プレーンint値の最大値は次のように使用できますsys.maxint

>>> sys.maxint
9223372036854775807

ここに-sys.maxint - 1示すようにを使用して最小値を計算できます

この値を超えると、Pythonはプレーン整数からロング整数にシームレスに切り替えます。ほとんどの場合、それを知る必要はありません。


177
この数は任意のように見えるかもしれませんが、そうではありません。9223372036854775807はまさにな2^63 - 1ので、64ビットのintを持っています。一般に、nビット整数には、-2^(n-1)〜の範囲の値があります2^(n-1) - 1
NullUserException

22
32ビットのPythonランタイムを使用している場合2^31 - 1、Pythonはlongデータ型を使用して64ビットにシームレスにジャンプしますが、sys.maxintはを返します。
スコットスタッフォード

19
sys.maxsize代わりに、@ Akash Ranaの提案に従って使用してください。ドキュメントが言うようにsys、Python 2にも存在します。これにより、コードは両方のPythonバージョンとの互換性が向上します。
Ioannis Filippidis 2015年

6
あなたと私はその行のドキュメントとは異なる解釈を持っています。での置き換え2to3は、ほとんどの場合何も壊さない素早いダーティヒューリスティックですが、これら2つの値の違いは重要です。ベストプラクティスは、実際に使用する値を使用することです。Python 2で本当に必要な 場合はsys.maxint、Python 3ではもう必要ありませんsys.maxsize。完全に削除し、に変更する必要はありません。
sendle 2015年

3
minsize-ビット単位のmin演算子で乗算すると、minsize〜sys.maxsize
om471987が16:16の

238

他のすべてよりも大きい数が必要な場合は、

float('inf')

同様の方法で、他のすべてよりも小さい数:

float('-inf')

これはpython 2と3の両方で機能します。


9
ただ注意(これは無関係ですが、まだです):float( 'inf')> float( 'inf')は「false」になります。無限数は別の無限数より大きい必要があります:-D ... 心のスナップ
Scre

11
@Scre他に何を期待しますか? x > xは通常Falseであり、無限大も例外ではありません。(float('NaN)一方、...)
jamesdlin

6
これは実際にはintコーズには適用されませんcannot convert infinite float to int...しかし、ほとんどの場合に機能します
Leighton

5
int('inf')動作しないことに注意してください。
トム・ヘイル

4
これはOPの質問に対する答えではありません
ghosh '28

225

この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を使用してください。

参照:https : //docs.python.org/3/whatsnew/3.0.html#integers


1
正しい。実際、from help(sys)maxsize-サポートされるコンテナの最大長。これは受け入れられる答えになるはずです。
Marco Sulla

77

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

36
混乱を増すために、Python longはJavaのようなものではなく、longむしろに近いBigIntegerです。
NullUserException

python3では、Lサフィックスがないようです、そして、それは、数がどんなに大きくてintlong、単にではなく、です。
Eric Wang

39

Python 3の場合、

import sys
max = sys.maxsize
min = -sys.maxsize - 1

3

34
まあ、ありがたいことにPython 3は存在ます(!); ただしsys.maxint、Python 3(tl; dr: " sys.maxint定数は削除されました(python3))には存在しません。整数の値に制限がなくなったためです。ただし、sys.maxsize実際のリストや文字列よりも大きい整数として使用できます。インデックス」
マイケル

2
min()and などの組み込みをシャドウする変数を作成するのはなぜmax()ですか?
RoadRunner-MSFT 2018

1
2の
補数

2
min = ~sys.maxsize
アンドリュー、


5

配列またはリストのインデックスの最大値が必要な場合(size_tC / C ++ と同等)、numpyを使用できます。

np.iinfo(np.intp).max

これは同じsys.maxsizeことですが、利点は、このためにインポートシステムを必要としないことです。

マシンのネイティブ整数の最大値が必要な場合:

np.iinfo(np.intc).max

docで他の使用可能なタイプを確認できます。

フロートの場合も使用できますsys.float_info.max


2

私はこのようなコマンドに大きく依存しています。

python -c 'import sys; print(sys.maxsize)'

返される最大整数:9223372036854775807

「sys」の詳細については、アクセスする必要があります

https://docs.python.org/3/library/sys.html

https://docs.python.org/3/library/sys.html#sys.maxsize


1
いいえ-maxsizeは単に、可能な最大のコンテナーインデックスです。Pythonは100桁以上の整数でも問題なく動作します
Tony Suffolk 66
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.