2 votes

"Y a-t-il un moyen d'obtenir la séquence de l'alphabet le plus consécutif ?"

Je travaille sur un problème python qui comporte une chaîne de caractères telle que "aaabbcc" et un nombre n (entier). Je dois afficher une séquence de tout caractère alphabétique qui apparaît exactement n fois.

J'ai essayé le code

import collections
str1 = 'aaabbcc'
d = collections.defaultdict(int)
for c in str1:
    d[c] += 1

for c in sorted(d, key=d.get, reverse=True):
  if d[c] > 1:
      print(c, d[c])

Mais j'obtiens le résultat suivant

a 3
b 2
c 2

Je m'attends à une sortie comme l'entrée entière 3 l'entrée est prise, de l'utilisateur.

integer= 3 
sequence= aaa

Existe-t-il une solution alternative ?

1voto

Tim Biegeleisen Points 53335

Voici une approche basée sur les expressions rationnelles qui semble fonctionner :

input = "ddaaabbbbbbbbccceeeeeee"
n = 3
for match in re.finditer(r'(.)(?!\1)(.)\2{' + str(n-1) + r'}(?!\2)', input):
print(match.group(0)[1:])

aaa
ccc

Le modèle regex utilisé dans l'exemple exact ci-dessus est le suivant :

(.)(?!\1)(.)\2{2}(?!\2)

Cela dit à :

(.)     match and capture any single character
(?!\1)  assert that the next character is different
(.)     then match and capture that next character
\2{2}   which is then followed by that same character exactly twice (total of 3)
(?!\2)  after three instances, the character that follows is NOT the same

1voto

hiro protagonist Points 1983

Un itertools.groupby -L'approche est basée sur l'expérience :

from itertools import groupby

str1 = 'aaabbcc'
n = 3

for key, group in groupby(str1):
    if len(tuple(group)) == n:
        print(f'integer: {n} sequence: {n*key}')

sans un key groupby regroupera la séquence par identité - c'est-à-dire qu'à chaque fois que la lettre en str1 change, cela donnera cette lettre et ses occurrences.

0voto

hiro protagonist Points 1983

Une approche basée sur les boucles (qui devrait être assez simple) :

str1 = 'aaabbcc'
n = 3

count = 1
last = None
for char in str1:
    if last == char:
        count += 1
    else:
        if count == n:
            print(f'integer: {n} sequence: {n*last}')
        last = char
        count = 1
if count == n:
    print(f'integer: {n} sequence: {n*last}')

la dernière instruction if est là pour imprimer une solution si une solution a été trouvée, y compris le dernier caractère de l'instruction str1 .

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