Как получить большинство встречающихся элементов в списке строк, также когда их много с одинаковым количеством?

#python #list

#python #Список

Вопрос:

Ожидается, что на выходе также будет список строк.

Например ['hey', 'ho', 'hi', 'hey', 'ho'] , следует выводить ['hey', 'ho']

 def find_most_popular(list):
    popular = max(set(list), key=list.count)
    return popular
  

Мой код выводит только один самый популярный

Спасибо!

Ответ №1:

Это то, что вам нужно (я использовал «l» вместо «list», чтобы избежать путаницы со встроенным типом данных «list»):

 def find_most_popular(l):
    popular = [i for i in l if l.count(i)==max([l.count(p) for p in set(l)])]
    return list(set(popular))
  

Для

 your_list=['hey', 'ho', 'hi', 'hey', 'ho']
  

Результат будет:

 find_most_popular(your_list)

['hey', 'ho']
  

Ответ №2:

Вы можете использовать collections.Counter :

 from collections import Counter

c = Counter(['hey', 'ho', 'hi', 'hey', 'ho'])
print([k for k, v in c.items() if v==c.most_common()[0][1]])
  

С принтами:

 ['hey', 'ho']