a few extensions for the itertools

Tim Chase python.list at tim.thechases.com
Mon Nov 20 11:32:41 EST 2006


>>> No, because the builtin sum want's a list. This can also
>>> handle any kind of iterable, so this would work:
>>> 
>>> isum(i**2 for i in xrange(100))
>>> 
>>> sum would need firs the whole list to be generated:
>>> 
>>> sum([i**2 for i in xrange(100)])
>> Really?
>> 
>>>>> sum(i**2 for i in xrange(20000000))
>> 2666666466666670000000L
>> 
>> seems to work fine, and judging by the memory usage it
>> pretty obviously doesn't create an intermediate list.
> 
> Very strange. I must have made some strange error. I tried
> that (more than once) and it failed. Don't know why. But now
> it works here, too. What did I write, when it failed?

Could you have been trying it on a version of python <2.4?

tim at oblique:~$ python2.3
Python 2.3.5 (#2, Sep  4 2005, 22:01:42)
[GCC 3.3.5 (Debian 1:3.3.5-13)] on linux2
Type "help", "copyright", "credits" or "license" for more 
information.
 >>> sum(i**2 for i in xrange(100))
   File "<stdin>", line 1
     sum(i**2 for i in xrange(100))
                ^
SyntaxError: invalid syntax


tim at oblique:~$ python2.4
Python 2.4.1 (#2, May  5 2005, 11:32:06)
[GCC 3.3.5 (Debian 1:3.3.5-12)] on linux2
Type "help", "copyright", "credits" or "license" for more 
information.
 >>> sum(i**2 for i in xrange(100))
328350


-tkc






More information about the Python-list mailing list