长整数的最大值


108

如何将长整数的最大值分配给变量,例如类似于C ++的LONG_MAX


7
我不确定Python整数是否有限制。现在,您越过sys.maxint,它会将内部表示形式从int更改为long,它具有无限的精度。
tchap 2012年

我问,因为我需要在一组值中一个一个地找到一个最小值,所以首先我需要将一个大值存储到一个变量中,以便可以将其与其他值进行比较
Sreevisakh 2012年

2
给您评论-我建议使用内置函数min。
吉里(Jiri)2012年

5
即使您只是试图寻找最小值,也不需要最大值,即使您使用C ++或任何其他语言编程也是如此。如果仍然要遍历所有元素,只需将第一个元素用作起始值即可。(但是min,如果您真的想用Python编程,最好使用该函数!)
John Y

3
@Sreevisakh:对于“大价值”,请使用无穷大float("inf")。或者更好,使用内置min功能。
Fred Foo 2012年

Answers:


132

长整数:

没有明确定义的限制。可用地址空间的数量构成了实际限制。
(摘自网站)。请参阅“ 数字类型 ”文档,在该文档中您会看到Long integers have unlimited precision。在Python 2中,当整数超出限制时,整数将自动切换为long:

>>> import sys
>>> type(sys.maxsize)
<type 'int'>
>>> type(sys.maxsize+1)
<type 'long'>


对于整数,我们有

maxint和maxsize:

int的最大值可以在Python 2.x中使用找到sys.maxint。它已在Python 3中删除,但sys.maxsize通常可以代替使用。从变更日志

sys.maxint常量已删除,因为整数值不再受限制。但是,sys.maxsize可以用作大于任何实际列表或字符串索引的整数。它符合实现的“自然”整数大小,并且通常与同一平台上的先前发行版中的sys.maxint相同(假定具有相同的生成选项)。

并且,对于任何对差异感兴趣的人(Python 2.x):

sys.maxint Python的常规整数类型支持的最大正整数。这至少是2 ** 31-1。最大的负整数是-maxint-1-不对称性是由于使用2的补码二进制算法引起的。

sys.maxsize平台的Py_ssize_t类型支持的最大正整数,因此列表,字符串,字典和许多其他容器可以具有的最大大小。

为了完整起见,这是Python 3版本

sys.maxsize 一个整数,赋予最大值Py_ssize_t类型的变量可以采用的值。在32位平台上通常为2 ^ 31-1,在64位平台上通常为2 ^ 63-1。

浮动:

float("inf")float("-inf")。可以将它们与其他数字类型进行比较:

>>> import sys
>>> float("inf") > sys.maxsize
True

我尝试了相同的代码,但在Windows 64位计算机上的python 3中仍显示为int类型。任何有价值的原因。
ManojP 2015年

1
@ManojP这是因为Python 3中的整数大小不再受限制。请参见第一个块引号。我将进行编辑以阐明该示例为Python 2
按键

39

Python long可以任意大。如果您需要一个大于任何其他值的值,则可以使用float('inf'),因为Python 可以轻松比较不同类型的数字值。同样,对于小于任何其他值的值,您可以使用float('-inf')


1
所以它返回一个非常大的值吗?
Sreevisakh 2012年

4
它返回浮点无穷大,该无穷大大于任何有限数。
塔蒙(Taymon)2012年

4
我必须说,就回答OP标题问题而言,这个答案绝对是最接近正确的答案。也就是说,“如何获得大于所有输入(或至少不小于最大值)的Python哨兵值?”。因此,我对这个答案表示赞同,但是我认为,如果OP学会用Python进行思考会更好。
约翰Y

同意 就是说,我一直处在这种情况下,这是我需要做的唯一方法。
塔蒙(Taymon)2012年

21

标题问题的直接答案:

整数的大小不受限制,在Python中没有最大值。

回答哪个可以解决基本用例:

根据您对要做的事情的评论,您目前正在考虑以下方面的想法:

minval = MAXINT;
for (i = 1; i < num_elems; i++)
    if a[i] < a[i-1]
        minval = a[i];

那不是在Python中思考的方式。到Python更好的翻译(但仍然不是最好的)是

minval = a[0]  # Just use the first value
for i in range(1, len(a)):
    minval = min(a[i], a[i - 1])

请注意,上面根本没有使用MAXINT。该解决方案的这一部分适用于任何编程语言:您无需仅在集合中找到最小值就知道最大的可能值。

但是无论如何,您真正在Python中所做的只是

minval = min(a)

也就是说,您根本不需要编写循环。内置min()函数获取整个集合的最小值。


8

longPython 2.x中的type使用任意精度算法,没有最大可能值之类的东西。它受可用内存的限制。对于无法由本机整数表示的值,Python 3.x没有特殊的类型-一切都已准备就绪,int并且转换在后台进行。


7

与C / C ++不同,Python中的Long具有无限的精度。 有关更多信息,请参见python中的数字类型部分。要确定整数的最大值,您可以参考sys.maxint。您可以从sys文档中获取更多详细信息。


1

您可以使用:float的最大值为

float('inf')

否定的

float('-inf')

2
标题为“长整数的最大值,而不是float的最大值。因此,在没有解释这如何回答问题的情况下,我认为这是NAA(不是答案)。
2016年

0

在python3中,您可以将浮点值发送到int函数中,以整数表示形式获取该值1.7976931348623157e + 308。

import sys    
int(sys.float_info.max)

这根本没有任何用处。为了说明这一点,请尝试int(sys.float_info.max)+1,您将得到一个整数,该整数又是一个整数,因为正如其他注释所述,Python仅存储无限精度的整数。
tialaramex
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.