I am trying to understand the working of the built-in sum()
function, but, the start
parameter has evaporated my mind:
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]
>>> 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?'
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.
sum is a built-in function in Python.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With