Python: длина строк строки

Есть ли более идиоматический способ суммирования строк в Python, чем с помощью цикла?

length = 0
for string in strings:
    length += len(string)

Я пробовал sum(), но он работает только для целых чисел:

>>> 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

Я знаю, что это старый вопрос, но я не могу не отметить, что сообщение об ошибке Python сообщает вам, как это сделать:

TypeError: sum() can't sum strings [use ''.join(seq) instead]

Итак:

>>> strings = ['abc', 'de']
>>> print len(''.join(strings))
5

Ответ 2

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

Ответ 3

Мой первый способ сделать это будет sum(map(len, strings)). Другой способ - использовать выражение для составления списка или выражение генератора, как опубликовали другие ответы.

Ответ 4

Самый короткий и быстрый способ - применить map() и sum():

>>> data = ['a', 'bc', 'def', 'ghij']
>>> sum(map(len, data))
10

В Python 2 используйте itertools.imap вместо карты для лучшей производительности памяти:

>>> from itertools import imap
>>> data = ['a', 'bc', 'def', 'ghij']
>>> sum(imap(len, data))
10

Ответ 5

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

Ответ 6

Здесь другой способ использования оператора. Не уверен, что это легче читать, чем принятый ответ.

import operator

length = reduce(operator.add, map(len, strings))

print length

Ответ 7

Просто добавьте...

Добавление чисел из списка, сохраненного в виде строки

nos = ['1', '14', '34']

length = sum (int (s) для s в nos)