abishek kumaresan abishek kumaresan - 7 months ago 99
Python Question

Python Memory Error while iterating to a big range

sum = 0
x = 2**32
for i in range(x):
sum=sum+i;
print sum


I am getting a
MemoryError
while looping to a range of
2**32
. Is there any way to do the iteration without running out of memory?

Answer

For a brute-force approach, try this:

x = sum(i for i in xrange(2**32))

The above will be more efficient, as it uses xrange to generate the numbers lazily, and it also uses a generator expression with sum() to avoid generating temporary data that gets discarded immediately.

But that will still take some time, as 2**32 is a big number. The smart way to solve this problem is to use a formula, as suggested by @DeepSpace:

n = 2**32 - 1
x = (n * (n + 1)) / 2