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

Ada*_*rsh 1 python python-2.7

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

这是简单的代码片段.

for i in range(sys.maxint):
  a = 1
Run Code Online (Sandbox Code Playgroud)

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

zst*_*art 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.你肯定没有那么多公羊(8*(2**63-1)=约7300万Tb).

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

即使你确实使用了xrange,它仍然需要永远计算2**63-1,但这是一个不同的问题,如果你打算早点打破for循环可能无关紧要.在应用程序开发期间请注意这一点.

在Python 3中,最后的注释xrange消失了,它range是构造一个惰性迭代器的函数.要获得rangePython 2中的等效功能,您可以这样做list(range(v))