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

评论

请注意,在Python 3中,int类型与Python 2中的long类型基本相同,因此,最大或最小int的概念完全消失了。即使在Python 2上,它也基本上无关紧要。

@agf:它可能以各种方式相关。例如,在任何需要保存找到的最小值的算法中(例如排序算法)。最小值可以在sys.maxint处初始化,因此可以确保找到的任何第一个值都用作min

@Toaster,除了可以列出所有值都大于sys.maxint的列表外,因为它只是Python 2上int类型的最大值,Python会默默地将其提升为long类型。

如果您需要在算法中使用“很大的值”,例如查找泛型集合的最小值或最大值,float('inf')或float('-inf')可能会很有帮助。

Python整数范围的可能重复项

#1 楼

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就会从纯整数无缝转换为长整数。所以大多数时候,您不需要了解它。

评论


这个数字可能看起来是任意的,但不是。 9223372036854775807恰好是2 ^ 63-1,因此您有一个64位int。通常,n位整数的值范围是-2 ^(n-1)到2 ^(n-1)-1。

– NullUserException
2011年9月30日,下午1:18

请注意,如果您使用的是32位Python运行时,则sys.maxint将返回2 ^ 31-1,即使Python将使用长数据类型无缝跳转到64位。

–斯科特·斯塔福德
2014-2-26在16:19



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

–Ioannis Filippidis
15-10-27在20:54



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

–senderle
2015年11月1日,12:51

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

–om471987
16-10-14在15:33

#2 楼

如果只需要一个大于所有其他数字的数字,则可以类似的方式使用

float('inf')


,该数字小于所有其他数字:

float('-inf')


这在python 2和3中都有效。

评论


只是一个注释(尽管无关紧要,但仍然如此):float('inf')> float('inf')得出'false'。无限数应大于另一个无限数:-D ...注意

–螺丝
17年6月28日在14:49

@Scre您还期望什么? x> x通常为False,并且无穷大也不例外。 (另一方面,float('NaN)...)

–詹姆士林
17年9月6日在2:03

这实际上不适用于int cauze不能将无限浮点数转换为int ...但是在大多数情况下都适用

–礼顿
17年9月23日在23:16

@Scre“在比较操作中,正无穷大大于除其自身和NaN的所有值,负无穷小于所有值除其自身和NaN之外的所有值。” gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html

–内森(Nathan)
17年7月7日在5:38

这不是OP问题的答案

–嘘
19年11月28日在12:28



#3 楼

sys.maxint常量已从Python 3.0及更高版本中删除,请改用sys.maxsize


整数


PEP 237:本质上,长整型重命名为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

评论


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

–马可·苏拉(Marco Sulla)
19/12/29在21:53

#4 楼

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

>>> 9223372036854775807
9223372036854775807
>>> 9223372036854775808
9223372036854775808L


从Python手册:


数字是由数字文字或以内置函数和运算符的结果。未经修饰的整数文字(包括二进制,十六进制和八进制数字)将生成纯整数,除非它们所表示的值太大而无法表示为纯整数,在这种情况下,它们将生成一个长整数。后缀为'L''l'的整数文字会产生长整数(首选'L'是因为1l看起来太像11个了!)。Python非常努力地假装其整数是数学整数,并且无界的。例如,它可以轻松计算googol:

>>> 10**100
10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L


评论


更令人困惑的是,Python的长处不像Java的长处-它更接近BigInteger。

– NullUserException
2011-09-30 1:20



在python3中,似乎没有L后缀,无论数字多大,它都只是int,不会长。

–王E
2月19日下午13:18



#5 楼

对于Python 3,它是

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


评论


python 3不存在。参见stackoverflow.com/questions/13795758/…

– netskink
17 Mar 28 '17 at 12:14

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

–迈克尔
17年7月16日在0:33

为什么要创建阴影来隐藏诸如min()和max()之类的变量?

–RoadRunner
18年7月12日在0:38

查找2的补码二进制文件

– netskink
19年6月6日在14:11

最小=〜sys.maxsize

–安德鲁(Andrew)
19年11月8日在4:03

#6 楼

您可以这样使用'inf':

import math
bool_true = 0 < math.inf
bool_false = 0 < -math.inf


参考:math —数学函数

评论


注意math.inf等同于float('inf')

–乔治
19-09-27在9:10

#7 楼

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

np.iinfo(np.intp).max


sys.maxsize相同,但是优点是

如果您希望在计算机上使用本机int的最大值:

np.iinfo(np.intc).max


您可以查看文档中其他可用的类型。

对于浮点数,您还可以使用sys.float_info.max

#8 楼

我严重依赖这样的命令。

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

评论


否-maxsize只是可能的最大容器索引。 Python将愉快地使用100位整数及更多

–托尼·萨福克66
19年4月28日在16:55

#9 楼

sys.maxsize实际上不是受支持的最大整数值。您可以将maxsize加倍并乘以它本身,它保持有效和正确的值。
但是,如果尝试sys.maxsize ** sys.maxsize,它将使您的计算机挂起相当长的时间。正如许多人指出的那样,字节和位的大小似乎无关紧要,因为它实际上不存在。我猜想python在需要更多内存空间时会愉快地扩展它的整数。因此,通常没有限制。
现在,如果您正在谈论以安全的方式打包或存储整数,以便以后可以完整地检索它们,那当然是相关的。我真的不确定打包,但我知道python的pickle模块可以很好地处理这些问题。字符串表示形式显然没有实际的限制。
实际上,最重要的是:您的应用程序限制是多少?对数字数据有什么要求?使用该限制代替python相当不存在的整数限制。