Python计算多个子字符串

Python计算多个子字符串,python,optimization,refactoring,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_

我试图计算字母在字符串中出现的次数,因此我使用了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+连接?

最好的方法是只需要迭代
s
一次,即O(n)

标准库
集合
模块提供了一个有用且高效的
计数器
对象:

>>> 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

最好的方法是只需要迭代
s
一次,即O(n)

标准库
集合
模块提供了一个有用且高效的
计数器
对象:

>>> 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

当前列出的errorRate变量不算数,因为我想按字母顺序排列,但我事先用“w”和“y”发了短信,得到了我想要的结果。很遗憾我们不能对评论进行否决@ewcz方案不好,在循环中使用
s.count
是毫无必要的低效。@wim fair;)
sum([1如果c在errorLetters中,则c在s中为0])
列出的errorRate变量目前不计算任何值,因为我想按字母顺序排列,但我事先用“w”和“y”发了短信,得到了我想要的结果。很遗憾我们不能对评论进行否决投票@ewcz方案不好,在循环中使用
s.count
是毫无必要的低效。@wim fair;)<代码>求和([1如果c在errorLetters中,其他0表示c在s中])有大量有用的库,这非常有用这里有大量有用的库,这非常有用