2017-05-23 43 views
0

我想计算字符显示在字符串中的次数,所以我使用的count()函数工作正常,但是使用多个count()函数似乎很乏味,因为我'米试图数10个以上的字母。Python计数多个子字符串

def printer_error(s): 
#errorLetters = ('r','s','t','u','v','w','x','y','z') 
errorRate = s.count('o') + s.count('p') + s.count('q') 


print(errorRate) 
return 

printer_error('aaaxbbbbyyhwawiwjjjwwm') 

我的第一次尝试是s.count(errorLetters),但因为count()函数不能使用元组或列表而失败。

当前的代码给了我想要的结果,但我仍然需要连接其他那些在errorLetters变量中注释掉的字母,还有另一种方法可以做到这一点,而不需要进行20+连接吗?

+0

因为我想继续保持目前按字母顺序列出的ERRORRATE变量不指望什么,但我发短信与事前“ w'和'y',并得到我想要的结果。 – bittercold

+0

这是一个耻辱,我们不能downvote评论。 @ewcz建议不好,在循环内部使用's.count'是无用的。 – wim

+0

@wim fair enough;)'sum([1 if c in errorLetters else 0 for c in s])' – ewcz

回答

2

要做到这一点,最好的方法只需要迭代s一次,即O(n)。

标准库collections模块提供了一个Counter对象,将是有益的,有效的:

>>> s = 'aaaxbbbbyyhwawiwjjjwwm' 
>>> errorLetters = ('r','s','t','u','v','w','x','y','z') 
>>> from collections import Counter 
>>> counts = Counter(s) 
>>> sum(counts[k] for k in errorLetters) 
8 
+0

有很多有用的库,这是很棒的工作 – bittercold

相关问题