Yanıtlar:
str.count (alt [, başlangıç [, bitiş]])
sub
Aralıktaki alt dizenin çakışmayan örnek sayısını döndürün[start, end]
. İsteğe bağlı bağımsız değişkenlerstart
veend
dilim gösteriminde olduğu gibi yorumlanır.
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
Count () işlevini kullanabilirsiniz :
>>> 'Mary had a little lamb'.count('a')
4
) Diğer cevaplar dize yöntemi sayımı (kullanarak, söylediği gibi muhtemelen en basit olmakla birlikte, sık sık yapıyorsan, kontrol collections.Counter :
from collections import Counter
my_str = "Mary had a little lamb"
counter = Counter(my_str)
print counter['a']
Düzenli ifadeler belki?
import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
len(re.findall('1',bin(10)))
myString.count('a');
burada daha fazla bilgi
Python-3.x:
"aabc".count("a")
str.count (alt [, başlangıç [, bitiş]])
[Başlangıç, bitiş] aralığında alt dize alt öğesinin çakışmayan olay sayısını döndürün. İsteğe bağlı başlangıç ve bitiş argümanları dilim gösterimindeki gibi yorumlanır.
str.count(a)
bir dizede tek bir karakteri saymak için en iyi çözümdür. Ancak, daha fazla karakter saymanız gerekiyorsa, dizenin tamamını saymak istediğiniz karakter sayısından daha fazla okumanız gerekir.
Bu iş için daha iyi bir yaklaşım:
from collections import defaultdict
text = 'Mary had a little lamb'
chars = defaultdict(int)
for char in text:
chars[char] += 1
Böylece, dizedeki her harfin yineleme sayısını ve 0
mevcut değilse döndüren bir kararınız olacaktır.
>>>chars['a']
4
>>>chars['x']
0
Büyük / küçük harfe duyarlı olmayan bir sayaç için, alt sınıflandırma yoluyla mutator ve erişimci yöntemlerini geçersiz kılabilirsiniz defaultdict
(temel sınıflar salt okunurdur):
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
, ki bu zaten bir sınıf collections
.
Counter
Daha şişirilmiş saf Python sınıftır ve defaultdict
'ın __missing__
olduğu C ile yazılmış . Bunun gibi basit bir görev için ( int
C de uygulanır) bu yaklaşım çok daha hızlıdır.
Bu kolay ve anlaşılır fonksiyon yardımcı olabilir:
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
. Değişkene adını verirseniz, str
artık yerleşik bir tür değildir. Ayrıca ondört b'nin ondört katı sayıyorsunuz. Sadece değiştirerek bu önleyebilirsiniz for c in text
ile for c in set(text)
.
Büyük / küçük harf duyarsızlığı (ve elbette normal ifadenin tüm gücü) istiyorsanız düzenli ifadeler çok yararlıdır.
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))
Normal ifade sürümünün çalıştırılması için on kat daha uzun sürdüğünü unutmayın, bu da yalnızca my_string çok uzunsa veya kodun derin bir döngü içerisindeyse sorun olacaktır.
Alternatif kullanmadan tüm karakter sayılarını almanın yolu Counter()
, count
ve düzenli ifade
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
kesinlikle bir dizede bir karakterin oluşumunu saymanın en özlü ve etkili yolu ama ben lambda
böyle bir şey kullanarak bir çözüm bulmaya çalıştı :
sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Bunun sonucu:
4
Ayrıca, bunun bir avantajı da, cümlenin yukarıdakiyle aynı karakterleri içeren alt dizelerin bir listesi olması, aynı zamanda kullanımından dolayı doğru sonucu vermesidir in
. Bir göz atın:
sentence = ['M', 'ar', 'y', 'had', 'a', 'little', 'l', 'am', 'b']
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Bu ayrıca aşağıdakilerle de sonuçlanır:
4
Tabii ki bu sadece 'a'
bu özel durumda olduğu gibi tek bir karakterin oluşumunu kontrol ederken işe yarayacaktır .
Msgstr "Dizgede istediğiniz karakteri bulmak için count kullanmadan" yöntemi.
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()
Ben panda kütüphanesi, özellikle value_counts()
yöntem hayranıyım . Dizenizdeki her karakterin oluşumunu saymak için kullanabilirsiniz:
>>> 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
Bunu başarmanın iki yolu vardır:
1) Dahili fonksiyon sayısı ile ()
sentence = 'Mary had a little lamb'
print(sentence.count('a'))`
2) Bir işlev kullanmadan
sentence = 'Mary had a little lamb'
count = 0
for i in sentence:
if i == "a":
count = count + 1
print(count)
Bu IMHO'dan daha fazla değil - üst veya alt yöntemleri ekleyebilirsiniz
def count_letter_in_str(string,letter):
return string.count(letter)