Question Compter les occurrences de nombre 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 'a' apparaît dans 'Mary had a little lamb'


718
2017-07-20 20:00


origine


Réponses:


str.count (sub [, début [, fin]])

Renvoie le nombre d'occurrences de sous-chaîne qui ne se chevauchent pas sub dans le périmètre [start, end]. Arguments facultatifs start et end sont interprétés comme en notation de tranche.

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

1016
2017-07-20 20:04



Vous pouvez utiliser compter() :

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

117
2017-07-20 20:04



Comme d'autres réponses l'ont dit, l'utilisation de la méthode string count () est probablement la plus simple, mais si vous le faites fréquemment, consultez collections.Counter:

from collections import Counter
str = "Mary had a little lamb"
counter = Counter(str)
print counter['a']

79
2017-08-01 22:12



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

import re
my_string = "Mary had a little lamb"
len(re.findall("a", my_string))

44
2017-07-20 20:03



myString.count('a');

Plus d'informations ici


23
2017-07-20 20:04



"aabc".count("a")

14
2017-07-20 20:05



Les expressions régulières sont très utiles si vous voulez 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 de regex prend environ dix fois plus de temps à s'exécuter, ce qui ne sera probablement un problème que si my_string est extrêmement long ou que le code est dans une boucle profonde.


8
2017-12-05 17:04



a = 'have a nice day'
symbol = 'abcdefghijklmnopqrstuvwxyz'
for key in symbol:
    print key, a.count(key)

5
2017-10-24 22:36



str.count(a) est la meilleure solution pour compter un seul caractère dans une chaîne. Mais si vous avez besoin de compter plus de caractères, vous devrez lire toute la chaîne autant de fois que les caractères 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

Donc, vous aurez une dict qui retourne le nombre d'occurrences de chaque lettre dans la chaîne et 0 si ce n'est pas présent.

>>>chars['a']
4
>>>chars['x']
0

Pour un compteur insensible à la casse, vous pouvez remplacer les méthodes de mutateur et d'accesseur par sous-classe defaultdict (ceux 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

5
2017-10-02 02:33



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
2018-04-01 01:29