4 ms·
I guess sum was only implemented to support numeric values. However you can easily roll your own: >>> def add(it): ... return reduce(lambda x, y: x +
by blixt 9y ago
I guess sum was only implemented to support numeric values. However you can easily roll your own:
>>> def add(it):
... return reduce(lambda x, y: x + y, it)
...
>>> add(['hello ', 'world'])
'hello world'
>>> add(x for x in xrange(10))
45
Edit: almost forgot a possibly even more Pythonic way:
>>> import operator
>>> def add(it):
... return reduce(operator.add, it)
- chicago_wade 9y ago>>> import operator >>> def add(it): ... return reduce(operator.add, it) Ooh, I like this one. Thanks!
- blixt 9y agoLooping back to why sum doesn't work with strings, it looks like they implemented it like this: >>> def sum(it): ... return reduce(operator.add, it, 0) Basically the first value is always added to 0. This has one important difference which can be a valid compromise if you expect to almost always sum numbers. If you try to call add([]) without the initial 0, you'll get an error because there's no way to know what the zero value is. In a typed language you could use type inference and use the inferred type's zero value (if the language has such a concept for all types like for example Go does). In Python I guess you could fall back to None, but then you'd have code that doesn't behave consistently for all inputs.