87 votes

Déterminer le nombre d'occurrences d'une sous-chaîne dans une chaîne de caractères en Python

J'essaie de savoir combien de fois une chaîne de caractères apparaît dans une autre chaîne. Par exemple :

nStr = '000123000123'

Disons que la chaîne de caractères que je veux trouver est 123. Il est évident qu'elle apparaît deux fois dans nStr, mais j'ai du mal à mettre en œuvre cette logique dans Python. Ce que j'ai pour l'instant :

pattern = '123'
count = a = 0
while pattern in nStr[a:]:
    a = nStr[a:].find(pattern)+1
    count += 1
return count

La réponse qu'il devrait renvoyer est 2. Je suis coincé dans une boucle infinie pour le moment.

Je viens d'apprendre que le comptage est une bien meilleure façon de procéder, mais par curiosité, quelqu'un voit-il une façon de procéder similaire à ce que j'ai déjà obtenu ?

0voto

gaurav parashar Points 462

String.count(substring) n'est pas utile en cas de chevauchement.

Mon approche :

def count_substring(string, sub_string):

    length = len(string)
    counter = 0
    for i in range(length):
        for j in range(length):
            if string[i:j+1] == sub_string:
                counter +=1
    return counter

0voto

N Prad Points 1

Vous ne changez pas a à chaque boucle. Vous devez mettre :

a += nStr[a:].find(pattern)+1

...au lieu de :

a = nStr[a:].find(pattern)+1

0voto

def count_substring(string, substring):
         c=0
         l=len(sub_string)
         for i in range(len(string)):
                 if string [i:i+l]==sub_string:
                          c=c+1
         return c
string=input().strip()
sub_string=input().strip()

count= count_substring(string,sub_string)
print(count)

0voto

Aditya Patnaik Points 693

Comme mentionné par @João Pesce et @gaurav, count() n'est pas utile dans le cas de sous-chaînes qui se chevauchent, essayez ceci...

def count_substring(string, sub_string):
    c=0
    for i in range(len(string)):
        if(string[i:i+len(sub_string)]==sub_string):
            c = c+1
    return c

0voto

Bhabani Sharma Points 11
def countOccurance(str,pat):
    count=0
    wordList=str.split()
    for word in wordList:
        if pat in word:
            count+=1
    return count

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X