Самый большой процент буквы 'a' в списке слов

Постала задача: напечатать все слова в которых самый большой процент букв 'a'

star='value,stack,nextdoor,gachi,brutal,brave,amazing,anaconda,brawle.'
strg=star[:-1]
split=strg.split(',')

max=0
for i in split:
    An = i.count('a')
    long = len(i)
    proc = An/long*100
    if proc > max:
        max = proc
        print(i)

print(max)

выводит правильный процент но кроме этого почему-то выводит это:

value
amazing
anaconda#вот это и 
37.5#это правильно

(вывело value(20%) и amazing(28%). Хотя у них не самый большой процент. Хоть value и не нужно выводить но аж стало интересно почему не вывело stack,gachi, brave(где тоже 20%))


Ответы (4 шт):

Автор решения: Эникейщик

Вы выводите значения, которые больше предыдущего максимума.

Исправить можно, например, так:

max=0
word = ""
for i in split:
    An = i.count('a')
    long = len(i)
    proc = An/long*100
    if proc > max:
        max = proc
        word = i

print(word, max)
→ Ссылка
Автор решения: Zhihar

вот такой алгоритм думаю подойдет:

  1. из каждого слова формируем массив только из букв а
  2. вычисляем длину массива а), т.е. по сути кол-во букв a
  3. делим на длину слова и получаем процент букв а в слове
  4. по этому показателю сортируем массив слов

код:

words.sort(key=lambda word: len([x for x in word if x == 'a']) / len(word))

ну или если вообще все в 1 строчку пихать:

text = 'value,stack,nextdoor,gachi,brutal,brave,amazing,anaconda,brawle.'

words = sorted(text[:-1].split(','), key=lambda w: len([c for c in w if c == 'a']) / len(w))

самый короткий код:

words = sorted(text[:-1].split(','), key=lambda w: w.count('a') / len(w))
→ Ссылка
Автор решения: Vlad

я сделал бы так:

star='value,stack,nextdoor,gachi,brutal,brave,amazing,anaconda,brawle.'

arr = star[:-1].split(",")
arr.sort(key = lambda x: -x.count("a") / len(x) * 100 if x.count("a") else 0)

for word in arr:
    print(f"{word}: {word.count('a') / len(word) * 100}")
→ Ссылка
Автор решения: Vitalya

Спасибо ребят, я решил сделать вот так что-бы если было 2 слова или больше с одинаковыми процентами ,то вывести их все

max=0
for i in split:
    An = i.count('a')
    long = len(i)
    proc = An/long*100
    if proc >= max:
        max = proc

for i in split:
    An = i.count('a')
    long = len(i)
    proc1 = An / long * 100
    if proc1 == max:
        print(i, max)
→ Ссылка