如何使用Python中的for循环从0迭代到sys.maxint

时间:2015-09-26 20:11:29

标签: python python-2.7

我试图从0迭代到sys.maxint但得到'MemoryError'。我该怎么做?。

以下是简单的代码段。

for i in range(sys.maxint):
  a = 1

错误:回溯(最近一次调用最后一次):   文件“”,第1行,in 的MemoryError

1 个答案:

答案 0 :(得分:10)

在Python 2中,range关键字构造一个列表,其中包含您指定范围内的所有数字。因此,如果要创建最大2**31-1的范围,则必须为4*(2**31-1)字节(大约8.5 Gb)分配空间。你可能没有那么多公羊。

并且2**31-1假设您使用的是32位python。对于64位python,maxint为2**63-1。你肯定有那么多ram(8*(2**63-1) =约7300万Tb)。

如果你想在Python 2中使用一组数字并且不想提前构建这些数字的完整列表(从而使用那么多ram),你可以使用{{ 1}}而不是xrange。语义是相同的,但它返回一个惰性迭代器而不是列表。

即使您使用range,仍需要永远计算到xrange,但这是一个不同的问题,如果您计划突破该问题可能无关紧要for循环比那更早。在应用程序开发期间请注意这一点。

最后一点,在Python 3中,2**63-1消失了,xrange是构造惰性迭代器的函数。要在Python 2中获得等效的range,您可以执行range