web-dev-qa-db-fra.com

Compter le nombre d'occurrences d'un caractère dans une chaîne

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'

809
Mat

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 optionnels start et end sont interprétés comme dans la notation de tranche.

>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
1151
Ogre Codes

Vous pouvez utiliser count () :

>>> 'Mary had a little lamb'.count('a')
4
126
eduffy

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']
89
Brenden Brown

Des expressions régulières peut-être?

import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))
46
Sinan Taifour
myString.count('a');

plus d'infos ici

23
Finer Recliner
"aabc".count("a")
14
Aaron Fi

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
10
Nuno André

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.

8
jafelds

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}
6
Erick Mwazonga
a = 'have a Nice day'
symbol = 'abcdefghijklmnopqrstuvwxyz'
for key in symbol:
    print key, a.count(key)
5
rookie

countest 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.

2
Satish Garg
str = "count a character occurance"

List = list(str)
print (List)
Uniq = set(List)
print (Uniq)

for key in Uniq:
    print (key, str.count(key))
2
Thiru

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()
1
B-Y
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))
0
rookie

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)
0

Utiliser Count: 

string = "count the number of counts in string to count from."
x = string.count("count")

x = 3.

0
Carlson Bimbuh

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)
0
Tim Seed