Python - подсчитать вхождения списка элементов в списке? - PullRequest
0 голосов
/ 29 октября 2019

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

my_list = [4,4,4,4,4,4,5,8]
count_items = [4,5,8]

это прекрасно работает:

from collections import Counter
print (Counter(my_list))
>> Counter({4: 6, 5: 1, 8: 1})

Однако, если в my_list нет записей для «4», например

my_list = [5,8] 
count_items = [4,5,8]
print (Counter(my_list))
>> Counter({5: 1, 8: 1})

Пока я ищу этот вывод:

>> Counter({4: 0, 5: 1, , 8: 1})

Ответы [ 3 ]

1 голос
/ 29 октября 2019

Для чего вам нужно значение?

Поскольку счетчик, который у вас есть, фактически возвращает 0 при запросе ключа 4:

my_list = [5,8] 
count_items = [4,5,8]
counter = Counter(my_list)
print(counter)
>> Counter({5: 1, 8: 1})
print(counter[4])
>> 0
0 голосов
/ 29 октября 2019

Счетчик является диктом и реализует метод обновления, который сохраняет нули:

>>> counter = Counter(my_list)
>>> counter
Counter({5: 1, 8: 1})
>>> counter.update(dict.fromkeys(count_items, 0))
>>> counter
Counter({5: 1, 8: 1, 4: 0})
0 голосов
/ 29 октября 2019

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

my_list = [5,8]
count_items = [4,5,8]
counter = {i: sum(map(lambda x: 1 if x == i else 0, my_list)) for i in count_items}
print (counter)
>> {4: 0, 5: 1, 8: 1}
...