Как найти 3 самых частых символа в строке?

Рейтинг: 0Ответов: 2Опубликовано: 20.06.2023

Смог найти 1 самый частый символ, а как быть с 2 и 3 не понимаю...вроде и исключил его из списка вводного, но как пишу новый for для поиска следующего частого, он опять пишет старый ответ, будто берет строку не ту где уже удалил.

value = input('Введите слово или текст: ')
sym_value = value[0]
num_value = value.count(value[0])

for i in value:
    if value.count(i) > num_value:
       sym_value = i
       num_value = value.count(i)
       res = value.replace(i, '')
print('Самый частый символ:', sym_value, 'встречается:', num_value, 'раз.')

Ввожу aaaaaaaabbcccccdeeeeeeeeeeee, возможно через while можно запустить цикл заново? Где уже исключен символ, но по идеи в переменных sym_value и num_value, будет старое значение?

Ответы

▲ 2Принят

Мне кажется, что вот будет понятнее:

a = 'aaaaaaaabbcccccdeeeeeeeeeeee'
count = {}

for key in a:
    count[key] = count.get(key, 0) + 1
  
sorted_count = dict(sorted(count.items(), key=lambda item: item[1]))

print(sorted_count) 

Собственно, весь алгоритм сводится к использованию метода get() для словаря. Если элемента с таким ключом нет, то он возвращает 0, а если есть, то его значение. Вот и получается, что при каждой встрече ключа, счётчик наращивается на единицу:

$ python test.py 
{'d': 1, 'b': 2, 'c': 5, 'a': 8, 'e': 12}
▲ 3
from collections import Counter

a = 'aaaaaaaabbcccccdeeeeeeeeeeee'

for e, i in sorted(Counter(a).items(), key=lambda x: x[1], reverse=True)[:3]:
    print(f'{e} -> {i} раз')

e -> 12 раз
a -> 8 раз
c -> 5 раз

UPD

Ну таки да. Так куда красивше выходит

for e, i in Counter(a).most_common(3):
    print(f'{e} -> {i} раз')