Python: значение, которое больше всего встречается в списке

У меня есть два списка:

x = ['a','a','b','c','b','a']

и

x = ['a','a','b','c','c','d']

Благодаря Rohit я обнаружил, что это работает для второго значения x.

from collections import Counter
count = counter(x)
count.most_common()

Я добавил

mc = [i for i,z in count.most_common() if z == 3]

но мне все равно нужно ввести z == 3, чтобы получить наиболее частое. Есть ли способ сделать z == 3 чем-то вроде max(z)

Ответ 1

Вы можете использовать модуль Counter от collections, если вы хотите найти вхождения каждого элемента в списке: -

>>> x = ['a','a','b','c','c','d']

>>> from collections import Counter
>>> count = Counter(x)
>>> count
Counter({'a': 2, 'c': 2, 'b': 1, 'd': 1})
>>> count.most_common()
[('a', 2), ('c', 2), ('b', 1), ('d', 1)]

Итак, первые два элемента наиболее часто встречаются в вашем списке.

>>> count.most_common()[0]
('a', 2)
>>> count.most_common()[1]
('c', 2)

или вы также передаете параметр most_common(), чтобы указать, сколько элементов most-common вы хотите: -

>>> count.most_common(2)
[('a', 2), ('c', 2)]

Обновление: -

Вы также можете сначала узнать число max, а затем найти общее количество элементов с этим значением, а затем вы можете использовать его как параметр в most_common(): -

>>> freq_list = count.values()
>>> freq_list
[2, 2, 1, 1]
>>> max_cnt = max(freq_list)
>>> total = freq_list.count(max_cnt)

>>> most_common = count.most_common(total)
[('a', 2), ('c', 2)]

>>> [elem[0] for elem in most_common]
['a', 'c']

Ответ 2

Вот еще одно решение:

max(zip((x.count(item) for item in set(x)), set(x)))

Сначала мы получаем коллекцию, не содержащую повторяющихся элементов с помощью set.

>>> set(x)
{'a', 'c', 'b'}

Затем мы подсчитываем, сколько раз каждый элемент находится в x. Это вернет объект-генератор, вы можете сделать его списком, чтобы увидеть его значения (используя "[...]" вместо "(...)" ), он вернет [3, 1, 2].

>>> (x.count(item) for item in set(x))

Затем мы берем счетчики и соединяем их с элементами, использующими zip. Количество вхождений сначала, для следующего шага. Вы можете увидеть его значение, используя список (...) на нем, он вернет [(3, 'a'), (1, 'c'), (2, 'b')].

>>> zip((x.count(item) for item in set(x)), set(x))

Наконец, мы найдем, какая из пар встречается чаще всего с использованием max.

>>> max(zip((x.count(item) for item in set(x)), set(x)))
(3, 'a')

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

>>> [mitem for mitem in zip((x.count(item) for item in set(x)),set(x)) if mitem[0] == max((x.count(item) for item in set(x)))]
[(2, 'a'), (2, 'c')]