如何计算列表项的出现次数?
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对象以显示结果。
本文内容总结: