Câu trả lời:
str.count (phụ [, bắt đầu [, kết thúc]])
Trả về số lần xuất hiện không chồng lấp của chuỗi con
sub
trong phạm vi[start, end]
. Đối số tùy chọnstart
vàend
được hiểu như trong ký hiệu lát.
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
Như các câu trả lời khác đã nói, sử dụng phương thức chuỗi đếm () có lẽ là đơn giản nhất, nhưng nếu bạn đang làm điều này thường xuyên, hãy kiểm tra các bộ sưu tập .
from collections import Counter
my_str = "Mary had a little lamb"
counter = Counter(my_str)
print counter['a']
Biểu thức thông thường có thể?
import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
len(re.findall('1',bin(10)))
myString.count('a');
thêm thông tin ở đây
Python-3.x:
"aabc".count("a")
str.count (phụ [, bắt đầu [, kết thúc]])
Trả về số lần xuất hiện không chồng lấp của chuỗi con phụ trong phạm vi [bắt đầu, kết thúc]. Các đối số tùy chọn bắt đầu và kết thúc được hiểu như trong ký hiệu lát.
str.count(a)
là giải pháp tốt nhất để đếm một ký tự đơn trong chuỗi. Nhưng nếu bạn cần đếm nhiều ký tự hơn, bạn sẽ phải đọc toàn bộ chuỗi nhiều lần số ký tự bạn muốn đếm.
Một cách tiếp cận tốt hơn cho công việc này sẽ là:
from collections import defaultdict
text = 'Mary had a little lamb'
chars = defaultdict(int)
for char in text:
chars[char] += 1
Vì vậy, bạn sẽ có một lệnh trả về số lần xuất hiện của mỗi chữ cái trong chuỗi và 0
nếu nó không xuất hiện.
>>>chars['a']
4
>>>chars['x']
0
Đối với bộ đếm không phân biệt chữ hoa chữ thường, bạn có thể ghi đè các phương thức bộ biến đổi và bộ truy cập bằng cách phân lớp defaultdict
(lớp cơ sở 'chỉ đọc):
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
, đã là một lớp trong collections
.
Counter
là một lớp Python tinh khiết cồng kềnh hơn và defaultdict
's __missing__
được viết bằng C . Đối với một nhiệm vụ đơn giản như thế này ( int
cũng được thực hiện trong C), cách tiếp cận này nhanh hơn rất nhiều.
Chức năng dễ dàng và chuyển tiếp này có thể giúp:
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
. Nếu bạn đặt tên của nó cho biến, str
không phải là loại tích hợp nữa. Ngoài ra, bạn đang đếm mười bốn b mười bốn lần. Bạn có thể tránh điều đó chỉ bằng cách thay đổi for c in text
với for c in set(text)
.
Biểu thức thông thường rất hữu ích nếu bạn muốn phân biệt chữ hoa chữ thường (và tất nhiên là toàn bộ sức mạnh của 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))
Xin lưu ý rằng phiên bản regex có thời gian chạy gấp mười lần, điều này có thể chỉ là vấn đề nếu my_ chuỗi quá dài hoặc mã nằm trong một vòng lặp sâu.
Một cách khác để có được tất cả các tội nhân vật mà không sử dụng Counter()
, count
và 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
chắc chắn là cách ngắn gọn và hiệu quả nhất để đếm sự xuất hiện của một ký tự trong một chuỗi nhưng tôi đã cố gắng đưa ra một giải pháp bằng cách sử dụng lambda
, đại loại như thế này:
sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Điều này sẽ dẫn đến:
4
Ngoài ra, có một lợi thế nữa cho điều này là nếu câu là danh sách các chuỗi con chứa cùng các ký tự như trên, thì điều này cũng cho kết quả chính xác vì sử dụng in
. Có một cái nhìn:
sentence = ['M', 'ar', 'y', 'had', 'a', 'little', 'l', 'am', 'b']
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Điều này cũng dẫn đến:
4
Nhưng tất nhiên điều này sẽ chỉ hoạt động khi kiểm tra sự xuất hiện của một ký tự đơn lẻ, như 'a'
trong trường hợp cụ thể này.
Phương thức "Không sử dụng số đếm để tìm bạn muốn ký tự trong chuỗi".
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()
Tôi là một fan hâm mộ của thư viện gấu trúc, đặc biệt là value_counts()
phương pháp. Bạn có thể sử dụng nó để đếm sự xuất hiện của từng ký tự trong chuỗi của bạn:
>>> 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
Con trăn 3
Có hai cách để đạt được điều này:
1) Với số lượng hàm tích hợp ()
sentence = 'Mary had a little lamb'
print(sentence.count('a'))`
2) Không sử dụng chức năng
sentence = 'Mary had a little lamb'
count = 0
for i in sentence:
if i == "a":
count = count + 1
print(count)
Không nhiều hơn IMHO này - bạn có thể thêm các phương thức trên hoặc dưới
def count_letter_in_str(string,letter):
return string.count(letter)