如何计算列表项的出现次数?

2023-09-21 19:29:28

使用内置 list 类的 list.count() 方法获取给定列表中项的出现次数。

names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
nm=input('Enter name to count: ')
count=names.count(nm)
print('count = ', count)

输出:

Enter name to count: John
count =  2

计算列表中每个项目的出现次数(Count Occurences of Each Item in List)

我们需要两个嵌套的 for 循环来计算列表中每个项目的出现次数。 位置索引i'th处的名称 - i是控制外部循环的变量,在用 j 变量迭代的剩余列表中搜索出现次数。 当前名称及其计数将添加到字典中,前提是该名称以前未作为键存在于字典中。

names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
d={}
for i in range(len(names)-1):
    x=names[i]
    c=0
    for j in range(i,len(names)):
        if names[j]==names[i]:
            c=c+1
    count=dict({x:c})
    if x not in d.keys():
        d.update(count)
print (d)

输出:

{'Deepak': 3, 'Reema': 3, 'John': 2, 'Munna': 1, 'Amit': 1}

同样,我们可以使用count() method使解决方案更加简洁。

names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
d={}
for i in range(len(names)-1):
    x=names[i]
    c=0
    for j in range(i,len(names)):
        c=names.count(x)
    count=dict({x:c})
    if x not in d.keys():
        d.update(count)
print (d)

输出:

{'Deepak': 3, 'Reema': 3, 'John': 2, 'Munna': 1, 'Amit': 1}

但是,此解决方案不是有效的解决方案。项目的出现次数与它在列表中出现的次数一样多,从而增加了处理时间,特别是对于包含大量项目的列表。

为了解决这个问题,我们首先在给定列表中创建一个唯一项的集合。Pythton 的 Set 对象是独特项的集合。

names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
nameset=set(names)
print(nameset)

输出:

{'Reema', 'Munna', 'Amit', 'Deepak', 'John'}

现在我们可以计算列表中set项的出现次数并构造dictionary对象。但是,这次我们将使用 list comprehension 而不是上面使用的常规 for 循环。

names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
nameset=set(names)
d={name:names.count(name) for name in nameset}
print(d)

输出:

{'Reema': 3, 'Munna': 1, 'Amit': 1, 'Deepak': 3, 'John': 2}

使用收集模块对列表中每个项目的出现次数进行计数(Count Occurences of Each Item in List using Collection Module)

Python 标准库中的collection module定义了许多专门的容器数据类型。其中之一是Counter类。它是一个字典子类,有助于给出可哈希项(如列表或字典)的计数。

from collections import Counter
names=['Deepak','Reema','John','Deepak','Munna','Reema','Deepak','Amit','John','Reema']
d=dict(Counter(names))
print (d)

输出:

{'Deepak': 3, 'Reema': 3, 'John': 2, 'Munna': 1, 'Amit': 1}

请注意,在上面,Counter对象被类型转换为常规dictionary对象以显示结果。


本文内容总结: