[Tutor] How sum() works in python

Peter Otten __peter__ at web.de
Tue Aug 1 04:57:22 EDT 2017


ramakrishna reddy wrote:

> Hi All,
> 
> I know
> 
>> sum([1,2,3]) returns 6.
> 
> But sum with [] 'empty list' as second parameter returns as below.
> 
>> sum([[1,2,3], [3,4,5]], []) returns [1, 2, 3, 3, 4, 5]
> Can any one please explain this logic ? I searched in google but could not
> find the suitable answer.

sum() adds up whatever you feed it (unless it's a string). A simplified 
pure-python implementation is

>>> def mysum(iterable, start=0):
...     result = start
...     for value in iterable:
...         result = result + value
...     return result
... 

When you feed it a list of numbers

>>> mysum([1, 2, 3, 4])
10

it calculates the sum, when the list is empty it returns the start value

>>> mysum([])
0

...whatever it may be:

>>> mysum([], mysum)
<function mysum at 0x7fd5ee36a510>
>>> sum([], sum)
<built-in function sum>

When you feed it a list of lists it tries to add 0 + first_list and fails

>>> mysum([[1,2], [3,4]])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in mysum
TypeError: unsupported operand type(s) for +: 'int' and 'list'

However when you provide a list as the start value that list and the lists 
in the `iterable` argument are concatenated

>>> mysum([[1,2], [3,4]], [])
[1, 2, 3, 4]
>>> mysum([[1, "a"], [3, 4.0]], [42])
[42, 1, 'a', 3, 4.0]

...because concatenation is what the + operator is written to do

>>> ["foo", "bar", "baz"] + ["ham", "spam"]
['foo', 'bar', 'baz', 'ham', 'spam']

for Python's built-in lists.

If you feed your own objects to sum() you are completely free how you 
implement + -- if you have it remove files from your hard drive then that's 
what sum() will do when you try to calculate the sum:

>>> class Remove(list):
...     def __radd__(self, other):
...         for name in self:
...             print("Deleting file", name)
... 
>>> sum([Remove(["important.txt", "keepsafe.doc"]), 
Remove(["nice_pic.jpg"])])
Deleting file important.txt
Deleting file keepsafe.doc
Deleting file nice_pic.jpg




More information about the Tutor mailing list