整数的最大值和最小值


744

我正在寻找python中整数的最小值和最大值。例如,在Java中,我们有Integer.MIN_VALUEInteger.MAX_VALUE。python中是否有类似的东西?


14
请注意,在Python 3中,int类型基本上与longPython 2中的类型相同,因此,最大值或最小值的想法int完全消失了。即使在Python 2上,它也基本上无关紧要
。– agf

8
@agf:它可能以各种方式相关。例如,在任何需要保存找到的最小值的算法中(例如排序算法)。该最小值可以在所有的sys.maxint所以它保证任何第一值测量被视为分钟被初始化
巴西莱Perrenoud

@Toaster,但您可以拥有一个列表,其中所有值都大于该列表,sys.maxint因为它只是intPython 2上该类型的最大值,Python会默默地将其提升为long
2014年

29
如果你需要使用“一个非常大的值”中的算法,如发现最小或最大泛型集合的,float('inf')或者float('-inf')可以说是相当有帮助的。
geoff

Answers:


852

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 2011年

22
请注意,如果您使用的是32位Python运行时2^31 - 1,即使Python与long数据类型无缝跳转到64位,sys.maxint也会返回。
Scott Stafford 2014年

19
sys.maxsize按照@Akash Rana的建议使用。正如sys文档所说,它也存在于Python 2中。这将使代码与两个Python版本更加兼容。
Ioannis Filippidis 2015年

6
您和我对文档中的这一行有不同的解释。替换2to3是一种很好的快捷方法,在大多数情况下不会破坏任何东西,但是这两个值之间的差异很重要。最佳做法是使用您实际上打算使用的值。如果您确实需要 sys.maxint Python 2,则在Python 3中将不再需要它,并且实际上应该将其完全删除,而不是更改为sys.maxsize
senderle'2015-11-15

3
minsize-与按位min运算符相乘得出minsize〜sys.maxsize
om471987

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')这不起作用。
汤姆·黑尔

3
这不是OP问题的答案
ghosh

225

sys.maxint常数已经在Python 3.0取出以后,改为使用sys.maxsize

整数

  • PEP 237:从本质上讲,long已重命名为int。也就是说,只有一个内置的整数类型,称为int;但它的行为基本上类似于旧的long类型。
  • PEP 238:类似1/2的表达式返回浮点数。使用1 // 2获得截断行为。(至少从Python 2.2开始,后一种语法已经存在多年了。)
  • sys.maxint常量已删除,因为整数值不再受限制。但是,sys.maxsize可以用作大于任何实际列表或字符串索引的整数。它符合实现的“自然”整数大小,并且通常与同一平台上的先前版本中的sys.maxint相同(假定具有相同的生成选项)。
  • 长整数的repr()不再包含结尾的L,因此无条件剥离该字符的代码将砍掉最后一位数字。(改为使用str()。)
  • 八进制文字不再采用0720的形式;请改用0o720。

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


1
正确。实际上,来自于help(sys)maxsize-支持的最大容器长度。这应该是公认的答案。
马可·苏拉

77

在Python中,一旦您传递值,整数将自动从固定大小的int表示形式转换为宽度可变的long表示形式,该值取决于平台sys.maxint是2 311-1或2 63-1。请注意L,此处已附加:

>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L

Python手册

数字是通过数字文字或内置函数和运算符创建的。未经修饰的整数文字(包括二进制,十六进制和八进制数字)将生成纯整数,除非它们表示的值太大而无法表示为纯整数,在这种情况下,它们将生成一个长整数。带'L''l'后缀的整数文字产生长整数('L'首选,因为1l看起来太像11!)。

Python非常努力地假装其整数是数学整数并且是无界的。例如,它可以轻松计算出googol

>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L

36
更令人困惑的long是,Python 不像Java long,而是更接近Java BigInteger
NullUserException 2011年

在python3中,似乎没有L后缀,无论数量多大,它只是int,不是long
艾瑞克·王

39

对于Python 3,它是

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


33
好吧,python 3确实存在,谢天谢地(!); 但sys.maxint在python 3中不存在(tl; dr: sys.maxint常量已被删除(在python3中),因为整数值不再受限制。但是,sys.maxsize可以用作大于任何实际列表或字符串的整数索引。”
迈克尔(Michael

2
为什么要创建阴影内建变量,例如min()max()
RoadRunner-MSFT

1
查找2的恭维二进制文件
netskink

2
min = ~sys.maxsize
Andrew


5

如果您想要数组或列表索引的最大值(相当于size_tC / C ++),则可以使用numpy:

np.iinfo(np.intp).max

这是相同的,sys.maxsize但是优点是您不需要为此仅导入sys。

如果要在计算机上将max用于本机int:

np.iinfo(np.intc).max

您可以在doc中查看其他可用类型。

对于float,您也可以使用sys.float_info.max


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.