关于python:int的最大值和最小值 您所在的位置:网站首页 最大的整数是 关于python:int的最大值和最小值

关于python:int的最大值和最小值

2023-05-26 23:40| 来源: 网络整理| 查看: 265

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

相关讨论 请注意,在Python 3中,int类型与Python 2中的long类型基本相同,因此最大或最小int的概念完全消失。 即使在Python 2上它也基本无关紧要。 @agf:它可以以各种方式相关。 例如,在任何需要保存找到的最小值的算法中(如排序算法)。 min值可以在sys.maxint初始化,因此它保证找到的任何第一个值都被视为min @Toaster除了你可以有一个列表,其中所有值都大于sys.maxint,因为它只是Python 2上int类型的最大值,Python将默默地提升为long。 如果您需要在算法中使用"非常大的值",例如 找到通用集合的最小值或最大值,float('inf')或float('-inf')可能非常有用。 Python整数范围的可能重复

Python 3

在Python 3中,这个问题不适用。普通的int类型是无界的。

但是,您实际上可能正在寻找机器的字大小。这仍然在Python 3中作为sys.maxsize提供。

Python 2

在Python 2中,plain int值的最大值可用作sys.maxint:

12>>> sys.maxint 9223372036854775807

您可以使用-sys.maxint - 1计算最小值,如下所示。

一旦超过此值,Python就会从普通整数切换为长整数。所以大多数时候,你不需要知道它。

相关讨论 这个数字似乎是任意的,但事实并非如此。 9223372036854775807正好是2^63 - 1,所以你有一个64位的int。通常,n位整数具有范围从-2^(n-1)到2^(n-1) - 1的值。 请注意,如果您使用的是32位Python运行时,sys.maxint将返回2^31 - 1,即使Python将使用long数据类型无缝跳转到64位。 改为使用sys.maxsize,正如@Akash Rana所建议的那样。它也存在于Python 2中,正如sys docs所说。这将使代码与两个Python版本更兼容。 @IoannisFilippidis,您是否100%确定所有系统和实施的值都相同?直到我找到令我信服的东西,我倾向于不做任何假设。 不,不能保证平等。但是,文档说这些通常是相同的,并建议替换,2to3适用。 你和我对文档中的那一行有不同的解释。 2to3中的替换是一种精细的快速和肮脏的启发式方法,它不会在大多数时间内破坏任何东西 - 但这两个值之间的差异很重要。最佳做法是使用您实际意味着使用的值。如果你真的需要Python 2中的sys.maxint,你将不再需要它在Python 3中,它应该真正被完全删除,而不是改为sys.maxsize。 minsize - 与Bitwise min运算符相乘得到minsize~sys.maxsize Python 3中不存在sys.maxint,因为您可以使用由数字列表表示的任意大整数(如Ruby)。 >>> 101000 == 101000 +1 False >>> 10.0100 == 10.0100 + 1 True 如果有人好奇为什么可编码的最大正整数对于64位是2^63 - 1而对于32位结帐是2^31 - 1这个帖子davidalbertoadler.com/twos-complement sys.int_info也可能是有意义的。 对于最小值,我们为什么-sys.maxsize之后需要-1? @DerekFan因为像几乎所有的现代计算平台一样,Python使用了两个补码。基本上,你有一个偶数个可能的值,零在正值中占据一个槽,所以有一个负值比非零正值。 @DerekFan我应该补充一点,不只是Python使用了两个补码;我很确定这发生在处理器本身的层面上。

sys.maxint常量已从Python 3.0开始删除,而是使用sys.maxsize

Integers

PEP 237: Essentially, long renamed to int. That is, there is only one built-in integral type, named int; but it behaves mostly like the old long type. PEP 238: An expression like 1/2 returns a float. Use 1//2 to get the truncating behavior. (The latter syntax has existed for years, at least since Python 2.2.) The sys.maxint constant was removed, since there is no longer a limit to the value of integers. However, sys.maxsize can be used as an integer larger than any practical list or string index. It conforms to the implementation’s"natural" integer size and is typically the same as sys.maxint in previous releases on the same platform (assuming the same build options). The repr() of a long integer doesn’t include the trailing L anymore, so code that unconditionally strips that character will chop off the last digit instead. (Use str() instead.) Octal literals are no longer of the form 0720; use 0o720 instead.

请参阅:https://docs.python.org/3/whatsnew/3.0.html

如果你只需要一个比其他数字更大的数字,你可以使用

1float('inf')

以类似的方式,比其他所有人都小:

1float('-inf')

这适用于python 2和3。

相关讨论 只是注意事项(与其无关,但仍然如此):float('inf')> float('inf')导致'false'。无限数字应该大于另一个无限数字:-D ...精神快照 @Scre你还期待什么? x > x通常False,无穷大也不例外。 (float('NaN),另一方面......) 这实际上不适用于int cauze cannot convert infinite float to int ...但适用于大多数情况 @Scre"在比较操作中,正无穷大大于除自身和NaN之外的所有值,负无穷大小于除自身和NaN之外的所有值。" gnu.org/software/libc/manual/html_node/Infinity-and-NaN.html 请注意,int('inf')不起作用。

在Python中,一旦传递值sys.maxint,整数将自动从固定大小的int表示切换为可变宽度long表示,取决于您的平台,该值为231 - 1或263 - 1。注意这里附加的L:

1234>>> 9223372036854775807 9223372036854775807 >>> 9223372036854775808 9223372036854775808L

从Python手册:

Numbers are created by numeric literals or as the result of built-in functions and operators. Unadorned integer literals (including binary, hex, and octal numbers) yield plain integers unless the value they denote is too large to be represented as a plain integer, in which case they yield a long integer. Integer literals with an 'L' or 'l' suffix yield long integers ('L' is preferred because 1l looks too much like eleven!).

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

12>>> 10**100 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000L 相关讨论 更令人困惑的是,Python的long与Java的long不同 - 它更接近BigInteger。

对于Python 3,它是

123import sys max = sys.maxsize min = -sys.maxsize -1 相关讨论 最小值应-sys.maxint - 1 python 3不存在。请参阅stackoverflow.com/questions/13795758/… 好吧,python 3确实存在,谢天谢地(!);但是在python 3中不存在sys.maxint(tl; dr:"sys.maxint常量被删除(在python3中),因为整数值不再有限制。但是,sys.maxsize可以用作一个大于任何实际列表或字符串索引的整数。") 大声笑,这是一个错字。我不确定我当时的想法。在python 3中,-sys.maxinit不存在或者也许,在python 3中不存在。我很高兴你知道我的意思。 8-) 为什么要创建隐藏内置函数的变量,例如min()和max()? max()在python 3中对我不起作用。你知道它的导入吗? 这在python 3.6.5中有效。为了我 为了最小值,为什么我们需要在-sys.maxsize之后-1? 查看2的恭维二进制文件

使用sys模块(python 3)

12345678import sys INT_MAX = sys.maxsize   INT_MIN = -sys.maxsize-1 print(INT_MAX,INT_MIN) 相关讨论 no - sys.maxsize是容器中最大的索引 - 与最大可能的整数无关。 Python将很乐意使用100位及更多的整数

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

1np.iinfo(np.intp).max

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

如果你想在机器上使用max for native int:

1np.iinfo(np.intc).max

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

对于浮动,您也可以使用sys.float_info.max。

我非常依赖这样的命令。

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

Max int返回:9223372036854775807

有关'sys'的更多参考,您应该访问

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

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

相关讨论 No - maxsize只是最大可能的容器索引。 Python将很乐意使用100位整数和更多

您可以像这样使用'inf': import math bool_true = 0

参考:数学 - 数学函数



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有