在python中为大数字运行for循环

时间:2017-07-08 15:13:57

标签: python

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

此代码段提供内存错误,而不是如何运行此循环。关于如何运行它的任何建议。谢谢。

>>>MemoryError

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

arr = []

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

我不知道如何处理如此庞大的数字。

5 个答案:

答案 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_)

或者,如果你想要整个数组,你可以将值写入文件,然后以块的形式读回文件。