2017-05-23 5 views
0

Ich versuche zu zählen, wie oft Buchstaben in einer Zeichenfolge angezeigt werden, also verwende ich die count() -Funktion, die gut funktioniert, aber mehrere count() -Funktionen scheint langweilig, da ich ' Ich versuche, mehr als 10 Buchstaben zu zählen.Python zählen mehrere Teilstrings

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

Mein erster Versuch war s.count (errorLetters), aber das scheiterte, weil die Funktion count() nicht Tupeln oder Listen nehmen.

der aktuelle Code gibt mir das Ergebnis, das ich will, aber ich muss noch den Rest dieser auskommentierten Buchstaben in der Variable errorLetters verketten, gibt es eine andere Möglichkeit, dies zu tun, die nicht mehr als 20 Verkettungen machen?

+0

Die ERROR Variable aufgelistet derzeit zählt nichts, weil ich es wollte alphabetisch halten, aber ich getextet es vorher mit ' w 'und' y 'und bekam das gewünschte Ergebnis. – bittercold

+0

Es ist eine Schande, dass wir Kommentare nicht ablehnen können. @ewcz Vorschlag ist nicht gut, es ist unnötig ineffizient, 's.count' innerhalb der Schleife zu verwenden. – wim

+0

@wim fair genug;) 'sum ([1 wenn c in FehlerLesters sonst 0 für c in s])' – ewcz

Antwort

2

Der beste Weg, dies zu tun, erfordert nur s einmal iterieren, d. H. O (n).

Standardbibliothek collections Modul bietet ein Counter Objekt, das nützlich und effizient sein wird:

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

Es gibt eine Tonne von nützlichen Bibliotheken das ist gut funktioniert – bittercold

Verwandte Themen