Python:Sum字符串长度

时间:2010-09-23 16:17:57

标签: python list sum

在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 个答案:

答案 0 :(得分:32)

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

答案 1 :(得分:15)

我的第一个方法是sum(map(len, strings))。另一种方法是使用列表推导或生成器表达式,就像其他答案已发布一样。

答案 2 :(得分:6)

最短,最快的方式是functional programming stylemap()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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

这是使用运算符的另一种方式。不确定这比接受的答案更容易阅读。

import operator

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

print length

答案 5 :(得分:1)

我知道这是一个老问题,但我不禁注意到Python错误消息告诉你如何做到这一点:

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

所以:

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

答案 6 :(得分:-1)

加上......

从存储为字符串的列表中添加数字

nos = [&#39; 1&#39;,&#39; 14&#39;,&#39; 34&#39;]

length = sum(以s为单位的int(s))