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)
length = sum(len(s) for s in strings)
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)
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))
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.
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