Je veux compter le nombre d'instances où les lettres consécutives sont identiques dans une chaîne donnée.

Par exemple, mon entrée de chaîne est:

EOOOEOEE

Je voudrais seulement trouver le nombre d'occasions où il y a plus d'un «O» consécutif.

La sortie doit être:

1

Depuis, il n'y a qu'un seul ensemble de O qui viennent consécutivement.

-3
Mahir 11 avril 2018 à 12:54

4 réponses

Meilleure réponse

C'est possible avec itertools.groupby:

from itertools import groupby

x = 'EOOOEOEE'

res = sum(len(list(j)) > 1 for i, j in groupby(x) if i == 'O')  # 1
1
jpp 11 avril 2018 à 10:01

Je suppose que vous voulez connaître le nombre de fois que toutes les lettres sont consécutives dans une chaîne et pas seulement pour la lettre «O».

Créez un dictionnaire de caractères qui contiendra ce nombre comme valeurs pour les clés comme les caractères d'une chaîne. char_dict = {}

L'idée est d'avoir deux conditions à remplir

(1) Le caractère actuel est-il le même que le caractère précédent

(2) Si la première condition est vraie, alors la paire actuelle de caractères consécutifs fait partie d'une sous-chaîne plus grande qui a les mêmes caractères consécutifs. Autrement dit, prenez par exemple ABBBCBB. Lorsque nous rencontrons le troisième B, nous voulons vérifier s'il fait partie d'une sous-chaîne consécutive et déjà prise en compte. c'est-à-dire que BBB devrait donner un compte consécutif à 1 et non à 2. Pour implémenter cela, nous utilisons une variable de drapeau qui vérifie ces conditions.

Si nous utilisons uniquement la (1) première condition, BBB comptera comme BB et BB et non comme un seul BBB.

Le reste du code est assez simple.

char_dict = {}
string = "EOOOEOEEFFFOFEOOO"
prev_char = None
flag=0

for char in list(string):
    if char not in char_dict:
        #initialize the count by zero
        char_dict[char] = 0

if char == prev_char and flag !=0:
    char_dict[char] += 1
    flag = 0
else:
    flag = 1

prev_char = char

print(char_dict)
0
Divyang Vashi 11 avril 2018 à 10:13

Vous pouvez utiliser une regex:

>>> import re
>>> s = 'EOOOEOEEOO'
>>> sum(1 for x in re.finditer(r'O{2,}', s))
2
1
Eugene Yarmash 11 avril 2018 à 10:00

Comptez simplement avec une boucle for:

n = 0
g = 0
s = 'EOOOEOEE'
for c in s:
    if c == 'O':
        g += 1
    elif g:
        if g > 1:
            n += 1
        g = 0

if g:
    n += 1

Ce qui donne n comme 1.

0
Joe Iddon 11 avril 2018 à 10:09