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