在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]
答案 0 :(得分:32)
length = sum(len(s) for s in strings)
答案 1 :(得分:15)
我的第一个方法是sum(map(len, strings))
。另一种方法是使用列表推导或生成器表达式,就像其他答案已发布一样。
答案 2 :(得分:6)
最短,最快的方式是functional programming style与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
答案 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))