2017-05-23 59 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

相關問題