我想从0迭代到sys.maxint,但得到'MemoryError'。我该如何做这件事?如何在Python中使用for循环从0迭代到sys.maxint
这是简单的代码片段。
for i in range(sys.maxint):
a = 1
ERROR:回溯(最近最后一次通话): 文件 “”,1号线,在 的MemoryError
我想从0迭代到sys.maxint,但得到'MemoryError'。我该如何做这件事?如何在Python中使用for循环从0迭代到sys.maxint
这是简单的代码片段。
for i in range(sys.maxint):
a = 1
ERROR:回溯(最近最后一次通话): 文件 “”,1号线,在 的MemoryError
在Python 2,范围关键字构造包含在范围内的所有数字的列表,你指定。所以如果你想创建一个高达2**31-1
的范围,它必须为4*(2**31-1)
字节(大约8.5Gb)分配空间。你可能没有那么多的内存。
而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
是构建一个懒惰的迭代器的功能。要在Python 2中获得相当于range
的效果,您可以使用[`xrange()`](https://docs.python.org/2/library/functions.html#xrange)'list(range(v))
。它支持迭代直到CPython中的'sys.maxint'。 –
使用'xrange'(或切换到python3)。 – ekhumoro
非常感谢。 – Adarsh