Подсчет количества вхождений в списках - PullRequest
0 голосов
/ 30 июня 2018

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

Пример данных:

list(c[0]):       list(c[1]):       list(c[1]):      
a                 a                 a
b                 b                 b
c                 c
d

И поэтому желаемый результат должен быть

a:3,b:3,c:2,d:1

Я понимаю, что Counter может быть применено к одному списку, но как мне рассчитать по спискам?

Ответы [ 4 ]

0 голосов
/ 01 июля 2018

Используйте chain.from_iterable, чтобы преобразовать список в плоский список, а затем передать его в Counter

from collections import Counter
from itertools import chain
c = [['a', 'b', 'c', 'd'], ['a', 'b'], ['a']]
Counter(chain.from_iterable(c))
# Counter({'a': 3, 'b': 2, 'c': 1, 'd': 1})
0 голосов
/ 30 июня 2018

Объедините 3 списка с itertools.chain, а затем используйте collections.Counter для подсчета элементов.

from collections import Counter
from itertools import chain
c = [['a', 'b', 'c', 'd'], ['a', 'b'], ['a']]
print(dict(Counter(chain(*c))))

Это выводит:

{'a': 3, 'b': 2, 'c': 1, 'd': 1}
0 голосов
/ 30 июня 2018

Во-первых, вам нужно преобразовать ваш список в плоский.

c = sum(c, [])

Тогда вы можете просто применить свой Counter.

from collections import Counter
print(dict(Counter(c)))
0 голосов
/ 30 июня 2018

Свести список и затем использовать счетчик:

Предполагая, что lst является списком из трех рассматриваемых списков:

flat = [i for sub in lst for i in sub]
Counter(flat)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...