Python: значение, которое встречается чаще всего в списке

у меня есть два списка следующим образом

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

и

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

Я пытаюсь найти значения, которые происходят в каждом из этих списков. Это то, что я пробовал.

def unique_values(output,input):
    for i in input:
        if i not in output:
            output.append(i)
k = []
for i in k:
    unique_values(k,x)
    y.remove(i)

Я получил это далеко но я не могу понять, как остановить for i in k: прежде чем он удалит все значения в списке.

2 ответов


можно использовать 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']

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

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')]