Python: Sum string lengths

2019-04-19 11:59发布

问题:

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]

回答1:

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


回答2:

length = sum(len(s) for s in strings)


回答3:

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.



回答4:

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


回答5:

print(sum(len(mystr) for mystr in strings))


回答6:

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


回答7:

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)



标签: python list sum