Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Было тут когда-то задание на поиск наиболее повторяющегося элемента списка. Свой алгоритм придумал, но... (+)

Молот Шотландцев Высший разум (303088), закрыт 4 года назад
...знаю что есть тут мастера всё решать в одну строчку. Но и как тогда это можно решить покороче?

Лучший ответ
Андрей Высший разум (483799) 4 года назад
a = [30, 20, 100, 32, 57, 10, 32, 57, 10, 35, 100, 31, 32]
l = {a.count(i): i for i in set(a)}
print(l[max(l)])
Остальные ответы
Ярослав Искусственный Интеллект (107899) 4 года назад
Алгоритмически это решается так (в один проход):
 пусть элемент = неЧисло, повторы = хэштаблица‎()‎;
 пока (число из числа) {
  пусть максПовторов = повторы‎[элемент] или 0;
  пусть повторыЧисла = повторы‎[число] = (повторы‎[число] или 0) + 1;
  если (неЧисло‎(элемент) или (повторыЧисла > максПовторов))
   элемент = число;
 }
 вывод‎(элемент, повторы‎[элемент]);
А как на червяке, да покороче - справочник по синтаксису поможет.
Реализация на скриншоте явно неоптимальна из-за вложенного цикла, то есть выполняться будет тем дольше, чем больше чисел. У хэштаблиц же, время доступа по ключу всегда ➝O(1).

// Удвоил объем псевдокода, чтобы показать: не всегда краткость оправдана. Код пишется в первую очередь для программера, поэтому он должен быть читаем (большой объем с читаемостью "по диагонали" всегда лучше маленького комочка спагетти-кода: на прочтении, это секунды против минут). Сокращать следует магией языка, такой как унарные операторы и хелпер-функции работы со структурами... а не экономией символов.
Похожие вопросы