2017-05-23 13 views
0

문자가 문자열에 표시되는 횟수를 계산하려고하므로 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)했지만 수() 함수는 튜플 또는 목록을 할 수 없기 때문에 그 실패했습니다.

현재 코드는 내가 원하는 결과를 제공하지만 errorLetters 변수에 주석이 달린 나머지 문자를 연결해야하는데 20 + 연결을 만드는 것을 포함하지 않는 또 다른 방법이 있습니까?

+0

현재 나와있는 ERRORRATE 변수 아무것도 계산하지 않습니다,하지만 난에 미리를 한테 문자 :

표준 라이브러리 collections 모듈은 유용하고 효과적 일 것 Counter 객체를 제공 w '와'y '를 입력하고 원하는 결과를 얻었습니다. – bittercold

+0

코멘트에 대해 우리가 downvote 할 수없는 것은 수치 스럽습니다. @ewcz 제안은 좋지 않습니다. 루프 내에서's.count'를 사용하는 것은 불필요하게 비효율적입니다. – wim

+0

@wim fair enough;)'sum ([1이면 c는 errorLetters에, c는 0이면 c)]' – ewcz

답변

2

이렇게하는 가장 좋은 방법은 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 
+0

유용한 라이브러리가 많이 있습니다. – bittercold