Jawaban:
str.count (sub [, mulai [, akhir]])
Mengembalikan jumlah kejadian substring yang tidak tumpang tindih
sub
dalam kisaran[start, end]
. Argumen opsionalstart
danend
ditafsirkan sebagai notasi slice.
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
Seperti jawaban lain mengatakan, menggunakan metode string menghitung () mungkin yang paling sederhana, tetapi jika Anda sering melakukan ini, periksa koleksi. Penghitung :
from collections import Counter
my_str = "Mary had a little lamb"
counter = Counter(my_str)
print counter['a']
Ekspresi reguler mungkin?
import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
len(re.findall('1',bin(10)))
myString.count('a');
info lebih lanjut di sini
Python-3.x:
"aabc".count("a")
str.count (sub [, mulai [, akhir]])
Kembalikan jumlah kejadian substring yang tidak tumpang tindih dalam rentang [mulai, akhir]. Argumen opsional mulai dan akhir ditafsirkan sebagai notasi slice.
str.count(a)
adalah solusi terbaik untuk menghitung satu karakter dalam sebuah string. Tetapi jika Anda perlu menghitung lebih banyak karakter, Anda harus membaca seluruh string sebanyak karakter yang ingin Anda hitung.
Pendekatan yang lebih baik untuk pekerjaan ini adalah:
from collections import defaultdict
text = 'Mary had a little lamb'
chars = defaultdict(int)
for char in text:
chars[char] += 1
Jadi, Anda akan memiliki dict yang mengembalikan jumlah kemunculan setiap huruf dalam string dan 0
jika tidak ada.
>>>chars['a']
4
>>>chars['x']
0
Untuk penghitung case yang tidak sensitif, Anda bisa mengganti metode mutator dan accessor dengan mensubklasing defaultdict
(yang kelas dasar hanya baca):
class CICounter(defaultdict):
def __getitem__(self, k):
return super().__getitem__(k.lower())
def __setitem__(self, k, v):
super().__setitem__(k.lower(), v)
chars = CICounter(int)
for char in text:
chars[char] += 1
>>>chars['a']
4
>>>chars['M']
2
>>>chars['x']
0
Counter
, yang sudah merupakan kelas di collections
.
Counter
adalah kelas Python murni lebih membengkak dan defaultdict
's __missing__
adalah ditulis dalam C . Untuk tugas sederhana seperti ini ( int
juga diimplementasikan dalam C) pendekatan ini lebih cepat.
Fungsi yang mudah dan lurus ini dapat membantu:
def check_freq(x):
freq = {}
for c in x:
freq[c] = str.count(c)
return freq
check_freq("abbabcbdbabdbdbabababcbcbab")
{'a': 7, 'b': 14, 'c': 3, 'd': 3}
str
. Jika Anda memberikan namanya ke variabel, str
bukan tipe bawaan lagi. Anda juga menghitung empat belas b empat belas kali. Anda dapat menghindarinya hanya dengan mengganti for c in text
dengan for c in set(text)
.
Ekspresi reguler sangat berguna jika Anda ingin case-insensitivity (dan tentu saja semua kekuatan regex).
my_string = "Mary had a little lamb"
# simplest solution, using count, is case-sensitive
my_string.count("m") # yields 1
import re
# case-sensitive with regex
len(re.findall("m", my_string))
# three ways to get case insensitivity - all yield 2
len(re.findall("(?i)m", my_string))
len(re.findall("m|M", my_string))
len(re.findall(re.compile("m",re.IGNORECASE), my_string))
Perlu diketahui bahwa versi regex membutuhkan urutan sepuluh kali lebih lama untuk dijalankan, yang kemungkinan akan menjadi masalah hanya jika my_string sangat panjang, atau kodenya berada di dalam loop yang dalam.
Cara alternatif untuk mendapatkan semua jumlah karakter tanpa menggunakan Counter()
, count
dan regex
counts_dict = {}
for c in list(sentence):
if c not in counts_dict:
counts_dict[c] = 0
counts_dict[c] += 1
for key, value in counts_dict.items():
print(key, value)
count
jelas merupakan cara yang paling ringkas dan efisien untuk menghitung kemunculan karakter dalam sebuah string, tetapi saya mencoba mencari solusi menggunakan lambda
, sesuatu seperti ini:
sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Ini akan menghasilkan:
4
Juga, ada satu keuntungan lagi untuk ini adalah jika kalimat adalah daftar sub-string yang berisi karakter yang sama seperti di atas, maka ini juga memberikan hasil yang benar karena penggunaan in
. Lihat:
sentence = ['M', 'ar', 'y', 'had', 'a', 'little', 'l', 'am', 'b']
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Ini juga menghasilkan:
4
Tapi Tentu saja ini hanya akan berfungsi ketika memeriksa kemunculan karakter tunggal seperti 'a'
dalam kasus khusus ini.
Metode "Tanpa menggunakan hitungan untuk menemukan karakter yang Anda inginkan dalam string".
import re
def count(s, ch):
pass
def main():
s = raw_input ("Enter strings what you like, for example, 'welcome': ")
ch = raw_input ("Enter you want count characters, but best result to find one character: " )
print ( len (re.findall ( ch, s ) ) )
main()
Saya penggemar perpustakaan panda, khususnya value_counts()
metodenya. Anda bisa menggunakannya untuk menghitung kemunculan setiap karakter di string Anda:
>>> import pandas as pd
>>> phrase = "I love the pandas library and its `value_counts()` method"
>>> pd.Series(list(phrase)).value_counts()
8
a 5
e 4
t 4
o 3
n 3
s 3
d 3
l 3
u 2
i 2
r 2
v 2
` 2
h 2
p 1
b 1
I 1
m 1
( 1
y 1
_ 1
) 1
c 1
dtype: int64
Python 3
Ada dua cara untuk mencapai ini:
1) Dengan jumlah fungsi bawaan ()
sentence = 'Mary had a little lamb'
print(sentence.count('a'))`
2) Tanpa menggunakan fungsi
sentence = 'Mary had a little lamb'
count = 0
for i in sentence:
if i == "a":
count = count + 1
print(count)