python:如何计算列表中给定元素的频率

时间:2017-11-02 08:13:55

标签: python counter

我理解计数器功能可以计算列表中每个元素的频率。但是我希望它包含来自给定元素的频率,即使元素没有出现在列表中。

例如:

预期元素列表如下:

expected_element = [1,2,3,4,5,6,7]

表示数据集a,b:

a = [1,1,1,1,6,6,6,3,3,4,5,5]
b = [2,2,7,1,7,5,3,5,5]

我想要的是计算a和b中的expected_element的频率:

表示:

keys() =   [1,2,3,4,5,6,7]
values() = [4,0,2,1,2,3,0]

代表b:

keys() =   [1,2,3,4,5,6,7]
values() = [1,2,1,0,3,0,2]    

2 个答案:

答案 0 :(得分:0)

您可以使用dict

expected_element = [1,2,3,4,5,6,7]
a = [1,1,1,1,6,6,6,3,3,4,5,5]
b = [2,2,7,1,7,5,3,5,5]

a_occurance = dict()
b_occurance = dict()
for i in expected_element:
    a_occurance[i]=0
    b_occurance[i]=0
for i in a:
    a_occurance[i]+=1
for i in b:
    b_occurance[i]+=1

print a_occurance.keys()
# [1, 2, 3, 4, 5, 6, 7]
print a_occurance.values()
# [4, 0, 2, 1, 2, 3, 0]
print b_occurance.keys()
# [1, 2, 3, 4, 5, 6, 7]
print b_occurance.values()
# [1, 2, 1, 0, 3, 0, 2]

答案 1 :(得分:0)

您可以使用set(a)中的唯一键创建一个字典,并与空值配对,然后使用Counter(b)进行更新:

from collections import Counter

a = [1,1,1,1,6,6,6,3,3,4,5,5]
b = [2,2,7,1,7,5,3,5,5]

frequencies = {key: 0 for key in set(a)}
frequencies.update(Counter(b))
print(frequencies)

输出:

{1: 1, 3: 1, 4: 0, 5: 3, 6: 0, 2: 2, 7: 2}