Как найти максимальные числа (не одно а несколько)?
Дана строка, содержащая последовательность латинских слов, разделенных пробелами. Определить букву, встречающуюся в словах чаще всех остальных. Если такая буква не одна, то вывести первую в алфавитном порядке. Вот что уже есть
txt = input("Введите текст: ")
mass = []
stxt = []
for i in txt:
if i not in stxt:
stxt.append(i)
for i in stxt:
mass.append(txt.count(i))
mmax = mass.index(max(mass))
В конце я получаю индекс максимального числа. Но если там не одно такое число то он просто берет первое, а мне надо брать все из них. мах так не может есть ли другие способы
Ответы (2 шт):
text = input('Введите текст: ') # ввод текса
letters = set(text) # делаем множество
letters.remove(' ') # пробел не буква - удаляем
letter_count = list()
for letter in letters:
# (буква, кол-во вхождений)
letter_count.append((letter, text.count(letter)))
# сортируем по убыванию частоты и возрастанию по порядку в алфавите
letter_count.sort(key=lambda x: (-x[1], x[0]))
print(letter_count[0])
Сократим код:
text = input('Введите текст: ')
letters = set(text).difference({' '})
letter_count = sorted([(letter, text.count(letter)) for letter in letters],
key=lambda x: (-x[1], x[0]))
print(letter_count[0])
И еще короче
text = input('Введите текст: ')
letter_count = sorted([(letter, text.count(letter)) for letter in set(text).difference({' '})],
key=lambda x: (-x[1], x[0]))
print(letter_count[0])
У функции max() есть необязательный аргумент key. Для вашего примера ключом будет функция count. А чтобы "Если такая буква не одна, то вывести первую в алфавитном порядке" можно строку сначала отсортировать. Примерно так:
txt = input("Введите текст: ")
print(max(sorted(txt), key=txt.count))
'''
Введите текст: ddd ss aaa
'a'
Ну а если пробелы учитывать не надо, то от них можно избавиться с помощью replace