for i in range(1000000000):
 print(i)

此代码段比“如何运行此循环”给出了内存错误。 关于如何运行它的任何建议。

>>>MemoryError

更新:实际上我正在尝试这样的事情:

arr = []

for i in xrange(1000000000):
    arr.append(i*i)
print(max(set(arr)))

我不知道如何处理这么大的数字。

===============>>#1 票数:4

在python2上,这会产生错误,因为range返回一个列表,在这种情况下,您的列表太大而无法容纳内存,请在python3中尝试,它将起作用。 尝试在python2中使用xrange

===============>>#2 票数:3

解决问题的一种方法是使用while循环,即使在大多数情况下xrange更为出色。

counter = 0
while (counter < 1000000000):
    print i
    counter = counter + 1

===============>>#3 票数:3

使用xrange而不是range应该可以解决您的问题

但是有什么区别呢?

在大多数情况下,它们是完全相同的。 它们都生成整数列表。 但是, range返回一个列表对象,xrange返回一个xrange对象。

基本上, xrange在运行时不会生成静态列表...而是根据需要生成值 ,从而防止内存错误。

编码愉快!

===============>>#4 票数:1

该范围通常返回可以迭代的值列表。 但是,但是,如果您尝试生成大量值,那么python生成器是最佳选择,因为它们一次生成一个值,并且内存效率高,可以处理大型可伸缩数据。

def firstn(n):
    num = 0
    while num < n: 
        yield num
        num += 1

generatorObject = firstn(1000000000)

for i in generatorObject:
    print(i)

===============>>#5 票数:1 已采纳

完全取决于您要执行的操作。 考虑到您已经在使用xrange ,我将假设问题出在您要创建的数组的大小上。 如果只需要最大的元素,则无需将整个数组保留在内存中。

max_ = float("-inf")
for n in xrange(10000000000):
    if n**2 > max_:
        max_ = n**2

print(max_)

或者,如果确实需要整个数组,则可以将值写入文件,然后分块读取文件。

  ask by NoOb translate from so

未解决问题?本站智能推荐: