Количество повторяющихся элементов в списке

Рейтинг: 10Ответов: 4Опубликовано: 24.04.2015

Есть массив, в котором куча повторяющихся элементов. Мне надо вывести содержимое конкретного элемента этого массива и сколько таких же элементов в нём (вывести цифру).
Пример массива:

array = ["Bob", "Alex", "Bob", "John"]  

(типа 2 Боба и т.д.)

Ответы

▲ 21Принят

Самый простой способ подсчитать количество вхождений всех элементов - воспользоваться встроенным классом Counter из модуля collections:

In [4]: from collections import Counter

In [5]: array = ["Bob", "Alex", "Bob", "John"] 

In [6]: c = Counter(array)

In [7]: c
Out[7]: Counter({'Bob': 2, 'Alex': 1, 'John': 1})

In [8]: c['Bob']
Out[8]: 2

In [9]: c['Unknown']
Out[9]: 0
▲ 3

Есть метод list.count

>>> array.count("Bob")
2
>>> array.count("John")
1
>>> dict((x, array.count(x)) for x in set(array) if array.count(x) > 1)
{'Bob': 2}
▲ 2

Например, вот так:

array = ["Bob", "Alex", "Bob", "John"];
result = {i: array.count(i) for i in array};

И вопрос, как тут вывести ключ по максимальному значению?

▲ 1

Вообще говоря, это reduce-задача. Но в Python'е крайне слабые средства для операций с ассоциативными массивами (dict). В частности, два таких массива нельзя просто так взять и сложить. Придётся сначала разложить их на кортежи (tuple), затем сложить, а в конце обратно соединить. В результате однострочник, который мог бы выглядеть достойно, будет выглядеть как-то так:

reduce(lambda x,y: dict(x.items()+[(y,x[y]+1 if y in x else 1)]), array, dict())