Подсчет количества раз появления буквы в Python - PullRequest
0 голосов
/ 07 июня 2018

Когда один и тот же символ появляется последовательно, как я могу подсчитать, сколько раз он появляется последовательно?

Например, AAARRRGGHH и вывести результат, подобный этому A 3 R 3 G 2 H 2

1 Ответ

0 голосов
/ 07 июня 2018

То, что вы пытаетесь достичь, называется run-length-encoding :

Вы можете решить эту проблему, просто перебирая текст и считая символы, сохраняя их в кортежах и создавая выходные данныеиз этих кортежей:

text = "AAARRRGGHH"

def runLengthEncode(t):
    cnt = 0       # how often did we see this character?
    cha = t[0]    # which character
    rv = []       # resulting list that stores our (character, count) tuples
    for c in t:   # process each character of the given text
        if c == cha:  # if it is equal to what we look for
            cnt +=1       # increment counter
        else:
            rv.append( (cha,cnt) )
            cnt = 1       # append so far counted ones as tuple (character,count)
            cha = c       # and remember the new char with a count of 1

    rv.append( (cha,cnt) ) # add the last character and its count

    # produce the output from our remembered tuples 
    return ' '.join( "{} {}".format(charac, nr) for charac,nr in rv)

print( runLengthEncode(text) )

Вывод:

A 3 R 3 G 2 H 2

Гораздо более питонический (itertools) ответ можно найти как ответ от Martijn Pieters длявопрос Длина кодирования в Python с пониманием списка :

(несколько отредактировано)

from itertools import groupby

string = "AAARRRGGHH"
print(' '.join(['{} {}'.format(k, sum(1 for _ in g)) for k, g in groupby(string)]))

Вывод:

 A 3 R 3 G 2 H 2
...