Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

python sum function - `start` parameter explanation required

Tags:

python

sum

I am trying to understand the working of the built-in sum() function, but, the start parameter has evaporated my mind:

  1. a=[[1, 20], [2, 3]]
    b=[[[[[[1], 2], 3], 4], 5], 6]
    >>> sum(b,a)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can only concatenate list (not "int") to list
    >>> sum(a,b)
    [[[[[[1], 2], 3], 4], 5], 6, 1, 20, 2, 3]
    
  2. >>> a=[1,2]
    >>> b=[3,4]
    >>> sum(a,b)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can only concatenate list (not "int") to list
    >>> sum(b,a)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: can only concatenate list (not "int") to list
    

I am just dumbfounded by this and don't have any idea what is happening. Here is what the python docs have to say: http://docs.python.org/library/functions.html#sum. This does not give any explanation on 'what if the start is not a string and not an integer?'

like image 993
GodMan Avatar asked Aug 30 '12 17:08

GodMan


People also ask

How does sum () work in Python?

Sum function in Python is a built-in function that takes an iterable like a list, tuple, dictionary, or set as an argument, adds the elements of an iterable and returns the sum. We can also provide an optional start parameter which will be added to the sum of numbers in the iterable.

Is sum a built-in class in Python?

sum is a built-in function in Python.


1 Answers

Sum does something like this

def sum(values, start = 0):
    total = start
    for value in values:
        total = total + value
    return total

sum([1,2],[3,4]) expands something like [3,4] + 1 + 2, which you can see tries to add numbers and lists together.

In order to use sum to produce lists, the values should be a list of lists, whereas start can be just a list. You'll see in your failing examples that the list contains at least some ints, rather then all lists.

The usual case where you might think of using sum with lists is to convert a list of lists into a list

sum([[1,2],[3,4]], []) == [1,2,3,4]

But really you shouldn't do that, as it'll be slow.

like image 117
Winston Ewert Avatar answered Nov 26 '22 08:11

Winston Ewert