Jaki jest najprostszy sposób policzenia liczby wystąpień znaku w ciągu?
np. policz, ile razy 'a'
pojawia się w'Mary had a little lamb'
str.count (sub [, start [, end]])
Zwraca liczbę nie nakładających się wystąpień podłańcucha
sub
w zakresie[start, end]
. Opcjonalne argumentystart
iend
są interpretowane jako w notacji plasterka.
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
Może wyrażenia regularne?
źródło
len(re.findall('1',bin(10)))
więcej informacji tutaj
źródło
Python-3.x:
źródło
str.count(a)
to najlepsze rozwiązanie, aby policzyć pojedynczy znak w ciągu. Ale jeśli chcesz policzyć więcej znaków, musisz przeczytać cały ciąg tyle razy, ile znaków chcesz policzyć.Lepszym podejściem do tej pracy byłoby:
Otrzymasz więc dyktand, który zwraca liczbę wystąpień każdej litery w ciągu i
0
jeśli nie jest obecny.W przypadku licznika bez rozróżniania wielkości liter można zastąpić metody mutatora i akcesorium przez podklasowanie
defaultdict
( metody klasy podstawowej są tylko do odczytu):źródło
Counter
, co jest już klasącollections
.Counter
jest bardziej nadęty czysta klasa Python idefaultdict
„s__missing__
jest napisany w C . W przypadku takiego prostego zadania (int
jest również zaimplementowane w C) takie podejście jest nieco szybsze.Ta łatwa i prosta funkcja może pomóc:
źródło
str
. Jeśli podasz nazwę zmiennej,str
nie jest to już typ wbudowany. Również czternaście razy czternaście. Możesz tego uniknąć, zmieniając zafor c in text
pomocąfor c in set(text)
.Wyrażenia regularne są bardzo przydatne, jeśli chcesz rozróżniać małe i wielkie litery (i oczywiście całą moc wyrażeń regularnych).
Należy pamiętać, że wersja wyrażenia regularnego uruchamia się dziesięć razy dłużej, co może stanowić problem tylko wtedy, gdy ciąg my_string jest niezwykle długi lub kod znajduje się w głębokiej pętli.
źródło
źródło
źródło
Alternatywnym sposobem, aby uzyskać wszystkie liczby znaków bez używania
Counter()
,count
a regexźródło
count
jest zdecydowanie najbardziej zwięzłym i wydajnym sposobem liczenia występowania znaku w ciągu, ale próbowałem znaleźć rozwiązanie, używająclambda
czegoś takiego:Spowoduje to:
Jest jeszcze jedna zaleta tego, że jeśli zdanie jest listą podłańcuchów zawierających te same znaki jak powyżej, to również daje poprawny wynik ze względu na użycie
in
. Spójrz :Powoduje to również:
Ale oczywiście będzie to działać tylko podczas sprawdzania występowania pojedynczego znaku, na przykład
'a'
w tym konkretnym przypadku.źródło
Metoda „Bez użycia licznika do znalezienia znaku w ciągu”.
źródło
Jestem fanem biblioteki pand, w szczególności
value_counts()
metody. Możesz go użyć do zliczenia występowania każdego znaku w ciągu:źródło
źródło
Istnieją dwa sposoby na osiągnięcie tego:
1) Z wbudowaną funkcją count ()
2) Bez użycia funkcji
źródło
Nie więcej niż to IMHO - możesz dodać górną lub dolną metodę
źródło