Résolue

Méthode count, str vs liste.

# Chaînes de caractères # Listes

Gabriel Trouvé

Mentor

Bonjour, J'ai juste besoin d'une petite clarification.

Je fais référence à l'exercice avec la phrase "lorem..." où il faut retourner le nombre de fois où le mot elit est présent.

Dans la solution on transforme la phrase en liste.

Si on ne transforme pas la phrase en liste le count prend en compte le mot velit. Mais quand c'est dans une liste la méthode count ne prend strictement que le mot demandé ?


Merci, j'ai du mal à expliquer clairement mon problème j'espère que vous me comprenez.

Je me suis représenté la méthode count comme cela (mais je ne sais si c’est vraiment cela qu’elle fait). A confirmer par un expert :)


Dans une phrase (je prends une fausse, plus courte pour l’exemple)


texte = "lor elit velit"


texte.count("elit") va faire ça :


lor elit velit

elit ------------ 0

 elit ----------- 0

  elit ---------- 0

   elit --------- 0

    elit -------- 1

     elit ------ -0

      ...

        elit -- 0

          elit - 1


total 2 fois


Alors que dans une liste :


texte_liste = ["lor", "elit", "velit"]

il n'apparait qu'une fois.

Gabriel Trouvé

Mentor

j'ai du mal à voir ce que tu veux dire :

"lor elit velit

elit ------------ 0

 elit ----------- 0

 elit ---------- 0

  elit --------- 0

   elit -------- 1

    elit ------ -0

     ...

       elit -- 0

         elit - 1


total 2 fois"

Mais oui dans une liste count va chercher uniquement le mot en question alors qu'une chaine il balaye tout "bêtement" je pense.

Il va passer "elit" sur l'ensemble des caractères de la phrase. Il va comparer :

"lor " avec "elit" 0

"or e" avec "elit" 0

"r el" avec "elit" 0

" eli" avec "elit" 0

"élit" avec "elit" 1

.

.

.

Et à la fin il le retrouve une deuxième fois.


Il parcourt comme ça l'ensemble de la phrase en se déplaçant d'un caractère. Jusqu'à trouver une correspondance.


Bonjour,


oui voilà c’est ça. L’explication de Loudo est claire. Si tu ne veux pas passer par la transformation liste tu peux utiliser une regex en spécifiant que tu ne veux « matcher » que les mots entier qui sont ‘elit’ et non ceux qui contiennent cette chaine de caractères avec le caractère spécial \b

Comme ceci:


import re
reg = ‘\belit\b’
resultat = len(re.findall(reg, lorem))

Gabriel Trouvé

Mentor

Ah merci j'ai compris ! Loudo j'ai compris avec ton 2eme message. Merci Pierre-André.

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.