Quelle est la façon la 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'
str.count (sub [, start [, end]])
Renvoie le nombre d'occurrences non superposées de sous-chaîne
sub
dans la plage[start, end]
. Les arguments facultatifsstart
etend
sont interprétés comme en notation de tranche.
>>> sentence = 'Mary had a little lamb'
>>> sentence.count('a')
4
Comme d'autres réponses l'ont dit, l'utilisation de la méthode de la chaîne count () est probablement la plus simple, mais si vous le faites fréquemment, consultez les collections .
from collections import Counter
my_str = "Mary had a little lamb"
counter = Counter(my_str)
print counter['a']
Des expressions régulières peut-être?
la source
len(re.findall('1',bin(10)))
plus d'infos ici
la source
Python-3.x:
la source
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 devrez lire la chaîne entière autant de fois que vous voulez compter.Une meilleure approche pour ce travail serait:
Vous aurez donc un dict qui renvoie le nombre d'occurrences de chaque lettre de la chaîne et
0
si elle n'est pas présente.Pour un compteur insensible à la casse, vous pouvez remplacer les méthodes de mutateur et d'accesseur en sous-classant
defaultdict
(celles de la classe de base sont en lecture seule):la source
Counter
, qui est déjà une classecollections
.Counter
est une classe Python pur plus pléthorique etdefaultdict
l »__missing__
est écrit en C . Pour une tâche simple comme celle-ci (int
est également implémentée en C), cette approche est légèrement plus rapide.Cette fonction simple et directe pourrait aider:
la source
str
. Si vous donnez son nom à la variable, cestr
n'est plus un type intégré. Vous comptez également quatorze fois quatorze b. Vous pouvez éviter cela simplement en changeantfor c in text
avecfor c in set(text)
.Les expressions régulières sont très utiles si vous voulez une insensibilité à la casse (et bien sûr toute la puissance de l'expression régulière).
Sachez que la version regex prend dix fois plus de temps à s'exécuter, ce qui ne sera probablement un problème que si my_string est extrêmement longue ou si le code se trouve dans une boucle profonde.
la source
la source
la source
Une façon alternative d'obtenir tous les décomptes de caractères sans utiliser
Counter()
,count
et regexla source
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 en utilisantlambda
quelque chose comme ceci:Cela se traduira par:
En outre, il y a un autre avantage à cela: si la phrase est une liste de sous-chaînes contenant les mêmes caractères que ci-dessus, cela donne également le résultat correct en raison de l'utilisation de
in
. Regarde :Cela se traduit également par:
Mais bien sûr, cela ne fonctionnera que lors de la vérification de l'occurrence d'un seul caractère, comme
'a'
dans ce cas particulier.la source
"Sans utiliser count pour trouver le caractère souhaité dans la chaîne".
la source
Je suis fan de la bibliothèque pandas, en particulier de la
value_counts()
méthode. Vous pouvez l'utiliser pour compter l'occurrence de chaque caractère de votre chaîne:la source
la source
Il y a deux façons d'y parvenir:
1) Avec nombre de fonctions intégré ()
2) Sans utiliser de fonction
la source
Pas plus que cette IMHO - vous pouvez ajouter les méthodes supérieures ou inférieures
la source