计算两个列表中的频率,Python

时间:2016-09-19 18:02:42

标签: python list frequency counting

我是python编程的新手,所以请关注我的新手问题......

我有一个初始列表(list1),我已经清理了重复项,最后只有一个列表,每个值只有一个(list2):

list1 = [13,19,13,2,16,6,5,19,20,21,20,13,19,13,16],

list2 = [13,19,2,16,6,5,20,21]

我想要的是计算“list2”中每个值出现在“list1”中的次数,但我无法弄清楚如何做到这一点而不会出错。

我正在寻找的输出类似于:

在list1中,数字13表示1次。 ........数字16在list1中表示2次。

6 个答案:

答案 0 :(得分:7)

最简单的方法是使用计数器:

from collections import Counter
list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16]
c = Counter(list1)
print(c)

Counter({2: 1, 5: 1, 6: 1, 13: 4, 16: 2, 19: 3, 20: 2, 21: 1})

因此,您可以使用与访问dicts相同的语法来访问表示项目及其出现次数的计数器的键值对:

for k, v in c.items():
    print('- Element {} has {} occurrences'.format(k, v))

,并提供:

- Element 16 has 2 occurrences
- Element 2 has 1 occurrences
- Element 19 has 3 occurrences
- Element 20 has 2 occurrences
- Element 5 has 1 occurrences
- Element 6 has 1 occurrences
- Element 13 has 4 occurrences
- Element 21 has 1 occurrences

答案 1 :(得分:6)

visited = []
for i in list2:
  if i not in visited:
    print "Number", i, "is presented", list1.count(i), "times in list1"
    visited.append(i)

答案 2 :(得分:1)

最简单最简单要理解, no-magic-approach 是创建一个对象(关联数组)并只计算数字list1的:

list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16]

frequency_list = {}

for l in list1:
    if l in frequency_list:
        frequency_list[l] += 1
    else:
        frequency_list[l] = 1

print(frequency_list)

打印出来:

{
    16: 2,
    2: 1,
    19: 3,
    20: 2,
    5: 1,
    6: 1,
    13: 4,
    21: 1
}

意思是16有两次,2有一次......

答案 3 :(得分:0)

您也可以使用运算符

>>> list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16],
>>> list2 = [13, 19, 2, 16, 6, 5, 20, 21]

>>> import operator
>>> for s in list2:
...    print s, 'appearing in :',  operator.countOf(list1, s)

答案 4 :(得分:0)

在技术方面,list是"类型" "对象"。 Python有许多内置类型,如字符串(str),整数(int),以及其他一些可以在谷歌上轻松找到的类型。这很重要的原因是因为每个对象类型都有自己的"方法"。您可以将这些方法视为完成常见编程任务并使您的生活更轻松的功能。

计算列表中出现的次数是常见编程任务的示例。我们可以使用count()方法完成它。例如,要计算list1中出现13的次数:

count_13 = list1.count(13)

我们也可以使用for循环迭代整个列表:

for x in list2:
    print(list1.count(x)) #This is for python version 3 and up

或者对于3岁以上的python版本:

for x in list2:
    print list1.count(x)

答案 5 :(得分:0)

您不需要删除重复项。当您自动添加到字典时,重复项将被视为单个值。

list1 = [13, 19, 13, 2, 16, 6, 5, 19, 20, 21, 20, 13, 19, 13, 16]
counts = {s:list1.count(s) for s in list1}
print counts

{2: 1, 5: 1, 6: 1, 13: 4, 16: 2, 19: 3, 20: 2, 21: 1}