我想從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