Is there a more idiomatic way to sum string lengths in Python than by using a loop?
length = 0
for string in strings:
length += len(string)
I tried sum()
, but it only works for integers:
>>> sum('abc', 'de')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]
I know this is an old question, but I can't help noting that the Python error message tells you how to do this:
TypeError: sum() can't sum strings [use ''.join(seq) instead]
So:
>>> strings = ['abc', 'de']
>>> print len(''.join(strings))
5
length = sum(len(s) for s in strings)
My first way to do it would be sum(map(len, strings))
. Another way is to use a list comprehension or generator expression as the other answers have posted.
The shortest and fastest way is apply a functional programming style with map() and sum():
>>> data = ['a', 'bc', 'def', 'ghij']
>>> sum(map(len, data))
10
In Python 2, use itertools.imap instead of map for better memory performance:
>>> from itertools import imap
>>> data = ['a', 'bc', 'def', 'ghij']
>>> sum(imap(len, data))
10
print(sum(len(mystr) for mystr in strings))
Here's another way using operator. Not sure if this is easier to read than the accepted answer.
import operator
length = reduce(operator.add, map(len, strings))
print length
Just to add upon ...
Adding numbers from a list stored as a string
nos = ['1','14','34']
length = sum(int(s) for s in nos)