HOWTO · Python

Compter les occurrences d'un caractère dans une chaîne en Python

Découvrez comment compter un caractère dans une chaîne Python avec `str.count()`, puis quand préférer `collections.Counter`, une boucle ou une expression régulière.

Sur cette page

Utilisez str.count() pour compter un caractère dans une chaîne Python. La méthode distingue les majuscules des minuscules et accepte aussi une sous-chaîne ; les correspondances qui se chevauchent ne sont pas comptées. Utilisez collections.Counter pour obtenir la fréquence de chaque caractère, une boucle pour appliquer une logique personnalisée et une expression régulière pour rechercher un motif.

Compter un caractère avec str.count()

La méthode intégrée str.count() est le choix le plus simple pour compter un caractère ou une sous-chaîne littérale. Elle prend le texte recherché en argument et renvoie le nombre de correspondances qui ne se chevauchent pas. La casse compte : les résultats pour "p" et "P" sont donc distincts.

Cet exemple autonome compte les l minuscules dans une courte chaîne. Remplacez text et target par vos propres valeurs ; si la cible comporte plusieurs caractères, la même méthode compte les occurrences de la sous-chaîne qui ne se chevauchent pas.

text = "hello, world!"
target = "l"

count = text.count(target)
print(count)

Par exemple, "aaaa".count("aa") renvoie 2, car les correspondances ne se chevauchent pas. Si vous devez compter des occurrences qui se chevauchent, utilisez une approche fondée sur un motif et définissez explicitement le comportement de correspondance souhaité.

Compter tous les caractères avec collections.Counter

collections.Counter, dans le module collections de Python, crée un tableau de fréquences à partir d’un itérable, y compris une chaîne. Cette solution est utile lorsque vous devez compter plusieurs caractères, et pas seulement un seul. Accédez au compte d’un caractère avec des crochets ; si le caractère est absent de l’entrée, son compte vaut 0.

from collections import Counter

text = "hello, world!"
counts = Counter(text)

print(counts["l"])
print(counts)

Le premier accès répond à la question du comptage d’un caractère, tandis que l’objet Counter contient les comptes de toute la chaîne. Vous pouvez examiner les entrées les plus fréquentes avec counts.most_common(). Cette méthode fait partie de la bibliothèque standard de Python : elle ne nécessite donc ni NumPy ni autre paquet tiers.

Compter avec une boucle ou une compréhension

Une boucle explicite rend visibles les étapes de comparaison et d’incrémentation. Elle est utile lorsque le comptage doit tenir compte de conditions supplémentaires ou d’un traitement personnalisé. Pour compter des caractères individuels, utilisez une cible composée d’un seul caractère.

text = "hello, world!"
target = "l"
count = 0

for character in text:
    if character == target:
        count += 1

print(count)

Une autre solution, plus concise, utilise sum() avec une expression génératrice. Elle ajoute un pour chaque caractère correspondant et ne crée pas de liste intermédiaire :

text = "hello, world!"
target = "l"

count = sum(character == target for character in text)
print(count)

La boucle et l’expression génératrice comparent les caractères comme le fait str.count() avec une cible d’un seul caractère, notamment en ce qui concerne la casse. Pour un comptage simple, str.count() est généralement plus facile à lire ; choisissez l’itération explicite si elle clarifie la logique environnante.

Compter un caractère avec une expression régulière

Utilisez le module standard re lorsque la cible est un motif ou que la tâche fait déjà appel aux expressions régulières. Un caractère brut n’est pas toujours interprété littéralement dans une expression régulière : des symboles comme . et * ont une signification spéciale. Si la cible vient d’une saisie utilisateur et doit être traitée comme du texte littéral, passez-la à re.escape() avant de construire le motif.

import re

text = "hello, world!"
target = "l"
pattern = re.escape(target)
count = len(re.findall(pattern, text))
print(count)

re.findall() renvoie les correspondances, et len() les compte. Les expressions régulières sont plus souples qu’un comptage de texte littéral, mais leur syntaxe demande un apprentissage supplémentaire. Pour un caractère ou une sous-chaîne ordinaire, str.count() est plus simple. Pour un motif de plusieurs caractères, vérifiez que le comportement habituel des expressions régulières — des correspondances sans chevauchement — convient à votre besoin.

Choisir la bonne méthode

  • Utilisez str.count() pour compter un caractère ou une sous-chaîne littérale. C’est une méthode concise, sensible à la casse, qui compte les occurrences de sous-chaînes sans chevauchement.
  • Utilisez collections.Counter si vous avez besoin d’un tableau de fréquences pour tous les caractères ou de plusieurs comptes.
  • Utilisez une boucle ou une expression génératrice avec sum() si vous devez appliquer un traitement personnalisé à chaque caractère.
  • Utilisez re lorsque la recherche porte réellement sur un motif ; pour traiter littéralement un texte fourni par l’utilisateur, échappez-le avec re.escape().

Pour la plupart des questions portant sur un seul caractère, commencez par str.count(). Les autres méthodes répondent à des besoins différents : statistiques sur tous les caractères, logique explicite caractère par caractère ou recherche par motif. Pour découvrir d’autres techniques de recherche dans les chaînes, consultez ce tutoriel Python.