Quel est le moyen le plus simple de compter le nombre d'occurrences d'un caractère dans une chaîne?
par exemple. compter le nombre de fois que 'a'
apparaît dans 'Mary had a little lamb'
str.count (sous [ début [ fin]])
Renvoie le nombre d'occurrences non chevauchantes de la sous-chaîne
sub
dans l'intervalle[start, end]
. Les arguments optionnelsstart
etend
sont interprétés comme dans la notation de tranche.
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
Vous pouvez utiliser count () :
>>> 'Mary had a little lamb'.count('a')
4
Comme d'autres réponses l'ont dit, utiliser la méthode string, count () est probablement la plus simple, mais si vous le faites souvent, consultez collections.Counter :
from collections import Counter
str = "Mary had a little lamb"
counter = Counter(str)
print counter['a']
Des expressions régulières peut-être?
import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
myString.count('a');
plus d'infos ici
"aabc".count("a")
str.count(a)
est la meilleure solution pour compter un seul caractère dans une chaîne. Mais si vous devez compter plus de caractères, vous devez lire toute la chaîne autant de fois que vous voulez compter.
Une meilleure approche pour ce travail serait:
from collections import defaultdict
text = 'Mary had a little lamb'
chars = defaultdict(int)
for char in text:
chars[char] += 1
Ainsi, vous aurez un dict qui retourne le nombre d’occurrences de chaque lettre de la chaîne et 0
si elle n’est pas présente.
>>>chars['a']
4
>>>chars['x']
0
Pour un compteur insensible à la casse, vous pouvez remplacer les méthodes du mutateur et de l'accesseur en sous-classant defaultdict
(celles de la classe de base sont en lecture seule):
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
Les expressions régulières sont très utiles si vous voulez une insensibilité à la casse (et bien sûr toute la puissance de 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))
Sachez que la version regex prend environ dix fois plus de temps à s'exécuter, ce qui ne posera vraisemblablement problème que si my_string est extrêmement long ou si le code se trouve dans une boucle profonde.
Cette fonction simple et directe pourrait aider:
def check_freq(str):
freq = {}
for c in str:
freq[c] = str.count(c)
return freq
check_freq("abbabcbdbabdbdbabababcbcbab")
{'a': 7, 'b': 14, 'c': 3, 'd': 3}
a = 'have a Nice day'
symbol = 'abcdefghijklmnopqrstuvwxyz'
for key in symbol:
print key, a.count(key)
count
est certainement le moyen le plus concis et le plus efficace de compter l'occurrence d'un caractère dans une chaîne, mais j'ai essayé de trouver une solution à l'aide delambda
, comme ceci:
sentence = 'Mary had a little lamb'
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Cela se traduira par:
4
De plus, si la phrase est une liste de sous-chaînes contenant les mêmes caractères que ci-dessus, cela donne également un résultat correct, du fait de l'utilisation de in
. Regarde :
sentence = ['M', 'ar', 'y', 'had', 'a', 'little', 'l', 'am', 'b']
sum(map(lambda x : 1 if 'a' in x else 0, sentence))
Cela se traduit également par:
4
Mais bien sûr, cela ne fonctionnera que lors de la vérification de l'occurrence d'un caractère unique tel que 'a'
dans ce cas particulier.
str = "count a character occurance"
List = list(str)
print (List)
Uniq = set(List)
print (Uniq)
for key in Uniq:
print (key, str.count(key))
Méthode "Sans utiliser count pour trouver votre caractère dans la chaîne".
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()
spam = 'have a Nice day'
var = 'd'
def count(spam, var):
found = 0
for key in spam:
if key == var:
found += 1
return found
count(spam, var)
print 'count %s is: %s ' %(var, count(spam, var))
Une autre façon d’obtenir tous les chiffres sans utiliser Counter()
, count
et 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)
Utiliser Count:
string = "count the number of counts in string to count from."
x = string.count("count")
x = 3.
Pas plus que cet IMHO - vous pouvez ajouter les méthodes supérieures ou inférieures
def count_letter_in_str(string,letter):
return string.count(letter)