Python: сумма длин строк - PullRequest
       6

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

12 голосов
/ 23 сентября 2010

Есть ли более идиоматический способ суммирования длин строк в 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]

Ответы [ 7 ]

32 голосов
/ 23 сентября 2010
length = sum(len(s) for s in strings)
15 голосов
/ 23 сентября 2010

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

6 голосов
/ 17 марта 2017

Самый короткий и быстрый способ - применить функциональный стиль программирования с map () и sum ()

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

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

>>> from itertools import imap
>>> data = ['a', 'bc', 'def', 'ghij']
>>> sum(imap(len, data))
10
2 голосов
/ 23 сентября 2010
print(sum(len(mystr) for mystr in strings))
1 голос
/ 20 сентября 2014

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

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

Итак:

>>> strings = ['abc', 'de']
>>> print len(''.join(strings))
5
1 голос
/ 10 февраля 2014

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

import operator

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

print length
0 голосов
/ 11 марта 2014

Просто добавить на ...

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

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

длина = сумма (int (s) для s в nos)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...