Python 3のsys.maxintとは何ですか?


162

私は最大の整数を表す方法を見つけようとしてきました、そして私はを使うために読みました"sys.maxint"。ただし、Python 3で呼び出すと、次のようになります。

AttributeError: module 'object' has no attribute 'maxint'

回答:


172

整数の値に制限がなくなったため、sys.maxint定数が削除されました。ただし、sys.maxsizeは、実際のリストまたは文字列インデックスよりも大きい整数として使用できます。これは、実装の「自然な」整数サイズに準拠し、通常、同じプラットフォーム上の以前のリリースのsys.maxintと同じです(同じビルドオプションを想定)。

http://docs.python.org/3.1/whatsnew/3.0.html#integers


79

他の人が指摘したように、Python 3にintは最大サイズがありませんが、他のどのint値よりも高いことが保証されているものが必要な場合は、で取得できるInfinityの浮動小数点値を使用できますfloat("inf")


また、レガシーPython(2.7)でも動作します-これは、可能なすべての実際の値よりも大きい数値を返す必要がある場合の正解です(たとえば、オブジェクトを比較してリストをソートする場合)
Aaron D

3
このアプローチの欠点の1つは、numbaやCythonなどでjitコンパイルを適用しようとすると、float infが配列のデータ型を破壊する可能性があることです。たとえば、jitコンパイラが自動的に適切なc型に変換できるように、すべての整数型のPythonリストが必要になる場合があります。これは、jitツールを適用して純粋なPython実装よりもはるかに高速にする従来のアルゴリズムにとって特に重要ですが、jitコンパイラーがデプロイされた環境にインストールされていない場合の利便性、テスト、フォールバックのために純粋なPythonで実装を作成する必要があります。 、など
ely 19/03/19

24

Python 3 intには最大値はありません。

Pythonと同じようにコンパイルしたときにCでのintの最大サイズを決定することが目的である場合は、structモジュールを使用して次のことを確認できます。

>>> import struct
>>> platform_c_maxint = 2 ** (struct.Struct('i').size * 8 - 1) - 1

Python 3 intオブジェクトの内部実装の詳細について知りたい場合はsys.int_info、桁あたりのビット数と桁サイズの詳細を確認してください。通常のプログラムではこれらを気にする必要はありません。


18

あなたが他のすべてよりも大きい数を探しているなら:

方法1:

float('inf')

方法2:

import sys
max = sys.maxsize

他のすべてよりも小さい数を探している場合:

方法1:

float('-inf')

方法2:

import sys
min = -sys.maxsize - 1

方法1は、Python2とPython3の両方で機能します。方法2はPython3で機能します。私はPython2で方法2を試していません。


3

Python 3のintは任意の長さなので、Python 3.0にはsys.maxintがありません。sys.maxintの代わりにsys.maxsizeがあります。正のサイズのsize_tまたはPy_ssize_tの最大サイズ。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.