for i in range(1000000000):
print(i)
此代码段提供内存错误,而不是如何运行此循环。关于如何运行它的任何建议。谢谢。
>>>MemoryError
更新 其实我正在尝试这样的事情:
arr = []
for i in xrange(1000000000):
arr.append(i*i)
print(max(set(arr)))
我不知道如何处理如此庞大的数字。
答案 0 :(得分:4)
在python2上,这将给出一个错误,因为range
返回一个列表,在这种情况下你的列表太大了,无法容纳内存,在python3中尝试它会起作用。在python2中尝试xrange
。
答案 1 :(得分:3)
解决问题的一种方法,即使在大多数情况下xrange
更优越,也就是使用while循环。
counter = 0
while (counter < 1000000000):
print i
counter = counter + 1
答案 2 :(得分:3)
使用xrange代替范围可以解决您的问题
但有什么区别?
在大多数情况下,它们完全相同。它们都生成一个整数列表。但是,echo
会返回列表对象,而range
会返回 xrange
对象。
基本上xrange
不会在运行时生成静态列表...而是根据需要生成值,这可以防止内存错误。
快乐的编码!
答案 3 :(得分:1)
范围通常返回可以迭代的值列表。但是,如果你试图生成大量的值,那么python Generators是最好的选择,因为它们一次产生一个值,并且处理大型可伸缩数据的内存效率很高。
def firstn(n):
num = 0
while num < n:
yield num
num += 1
generatorObject = firstn(1000000000)
for i in generatorObject:
print(i)
答案 4 :(得分:1)
取决于你想要做什么。鉴于您已经使用xrange
,我将假设问题与您正在创建的数组的大小有关。如果您只想要最大的元素,则不需要将整个数组保留在内存中。
max_ = float("-inf")
for n in xrange(10000000000):
if n**2 > max_:
max_ = n**2
print(max_)
或者,如果你想要整个数组,你可以将值写入文件,然后以块的形式读回文件。