Python计算多个子串

时间:2017-05-23 21:58:01

标签: python optimization refactoring

我正在尝试计算字母出现在字符串中的次数,所以我正在使用count()函数,该函数工作正常,但是使用多个count()函数似乎很乏味,因为我试图计算10个以上的信件。

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个以上的连接吗?

1 个答案:

答案 0 :(得分: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