# question on list comprehensions

Bengt Richter bokr at oz.net
Sun Oct 17 23:42:36 CEST 2004

```On Sun, 17 Oct 2004 17:13:25 +0200, aleaxit at yahoo.com (Alex Martelli) wrote:

>Mustafa Demirhan <mustafademirhan at gmail.com> wrote:
>
>> Why not just use while loops instead of for loops? You dont have to
>> create a new array each time you want a loop - you can simply use an
>> index integer.
>>
>>     i = 0
>>     while i < 5000000:
>>         res [0] = res [0] + i
>>         i = i + 1
>>
>> Takes less than 2 seconds on my laptop.
>
>Sure, this is fine, but low-level twiddling with indices isn't all that
>nice.  A compact alternative such as
>
>    res[0] = sum(xrange(5000000))
>
>is, IMHO, preferable to your while loop, not so much because it may be
>faster, but because it expresses a single design idea ("let's sum the
>first 5 million nonnegative integers") very directly, rather than
>getting into the low-level implementation details of _how_ we generate
>those integers one after the other, and how we sum them up ditto.
>
As I'm sure you know, sum(xrange(n)) is pretty predictable:

>>> for n in xrange(10):
...     print n, sum(xrange(n)), n*(n-1)/2
...
0 0 0
1 0 0
2 1 1
3 3 3
4 6 6
5 10 10
6 15 15
7 21 21
8 28 28
9 36 36
>>> n=5000000; print n, sum(xrange(n)), n*(n-1)/2
5000000 12499997500000 12499997500000

Guess where the time and space was consumed ;-)

Regards,
Bengt Richter

```

More information about the Python-list mailing list