On 01/08/17 07:06, ramakrishna reddy wrote: >> 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]
An interesting question, I wasn't aware that you could add lists with sum. However, the results seem clear enough. Let's start with the help() description: ################# Help on built-in function sum in module builtins: sum(...) sum(iterable[, start]) -> value Return the sum of an iterable of numbers (NOT strings) plus the value of parameter 'start' (which defaults to 0). When the iterable is empty, return start. ################# And lets see how it behaves with integers first: >>> sum([1,2,3]) # use start default of 0 6 >>> sum([1,2,3],0) # use explicit start=0 6 >>> sum([1,2,3],1) # use start=1 7 >>> sum([1,2,3],9) # start = 9 15 So in each case we get the sum of the items in the iterable plus the value of start. sum() is effectively doing result = start for n in iterable: result += n return result Now lets try using a list of lists: >>> sum([ [1,2,3],[3,4,5] ]) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: unsupported operand type(s) for +: 'int' and 'list' We get a type error because the start uses 0 and we can't add an int and a list. So let's provide a list as the start value: >>> sum([ [1,2,3],[3,4,5] ], []) [1, 2, 3, 3, 4, 5] >>> We now get the behaviour you saw because it adds the three lists together using the same algorithm as above. And if we use a non-empty start it becomes even more clear: >>> sum([ [1,2,3],[3,4,5] ], [42]) [42, 1, 2, 3, 3, 4, 5] We could use tuples instead of lists and get the same result. What is interesting is that if we try the same thing with other iterables, such as a string, it doesn't work, even though string addition is defined. There is obviously some type checking taking place in there. HTH -- Alan G Author of the Learn to Program web site http://www.alan-g.me.uk/ http://www.amazon.com/author/alan_gauld Follow my photo-blog on Flickr at: http://www.flickr.com/photos/alangauldphotos _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor