Как найти все наиболее часто дублирующиеся элементы с одинаковым количеством в списке python?
Допуcтим, что есть список names = [1, 2, 1, 4, 5, 1, 2, 3, 2]
здесь есть одинаковые элементы 1 и 2, выбор падает только на них ибо их количество наиболее встречаемое, ну и их количество одинаково, как это можно сделать?..
Ответы (3 шт):
Автор решения: Zhihar
→ Ссылка
можно сделать так:
names = [1, 2, 1, 4, 5, 1, 2, 3, 2]
# подсчитать максимальное кол-во элементов
max_count = names.count(max(names, key=lambda i: names.count(i)))
# найти все элементы
res = {i for i in names if names.count(i) == max_count}
print(res)
Автор решения: nomnoms12
→ Ссылка
from collections import Counter
from itertools import takewhile
names = [1, 2, 1, 4, 5, 1, 2, 3, 2]
d = Counter(names) # Counter({1: 3, 2: 3, 4: 1, 5: 1, 3: 1})
max_occurrences = d.most_common(1)[0][1] # 3
# [1, 2]
r = [v for v, _ in takewhile(lambda x: x[1] == max_occurrences, d.most_common())]
Автор решения: Олег
→ Ссылка
Идея проста. Сортируем список и считаем повторения пробегая по нему, сравнивая текущий элемент со следующим. Если они !=, то либо добавляем в словарь ответов (если кол-во повторений элемента такое же), либо переопределяем словарь с новым значением (если >).
names = [1, 2, 1, 4, 5, 5, 5, 5, 1, 2, 7, 7, 3, 2]
names.sort()
count = 1
answers = {names[0]: 1} # ответ формата {значение: число упоминаний}
for i in range(len(names)-1):
if names[i+1] == names[i]:
count += 1
elif count == max(answers.values()):
answers[names[i]] = count
count = 1
elif count > max(answers.values()):
answers = {names[i]: count}
count = 1
print(answers)
Хотелось бы что-нибудь элагантнее, чем max(answers.values()) для доступа к элементу словаря, есть идеи?