Feature suggestion: sum() ought to use a compensated summation algorithm

Ivan Illarionov ivan.illarionov at gmail.com
Sat May 3 19:12:56 EDT 2008


On Sun, 04 May 2008 00:31:01 +0200, Thomas Dybdahl Ahle wrote:

> On Sat, 2008-05-03 at 21:37 +0000, Ivan Illarionov wrote:
>> On Sat, 03 May 2008 20:44:19 +0200, Szabolcs Horvát wrote:
>> 
>> > Arnaud Delobelle wrote:
>> >> 
>> >> sum() works for any sequence of objects with an __add__ method, not
>> >> just floats!  Your algorithm is specific to floats.
>> > 
>> > This occurred to me also, but then I tried
>> > 
>> > sum(['abc', 'efg'], '')
>> 
>> Interesting, I always thought that sum is like shortcut of
>> reduce(operator.add, ...), but I was mistaken.
>> 
>> reduce() is more forgiving:
>> reduce(operator.add, ['abc', 'efg'], '' ) # it works 'abcefg'
> 
> Hm, it works for lists:
> sum(([1], [2]), [])
> [1, 2]
> 
> However I find the seccond argument hack ugly. Does the sum way have any
> performance advantages over the reduce way?

Yes, sum() is faster:

$ python -m timeit "" "sum([[1], [2], [3, 4]], [])"
100000 loops, best of 3: 6.16 usec per loop

$ python -m timeit "import operator" \
"reduce(operator.add, [[1], [2], [3, 4]])"
100000 loops, best of 3: 11.9 usec per loop

-- 
Ivan



More information about the Python-list mailing list