当我们需要将一个列表或字符串中某些元素出现的次数统计出来,并且按照这些元素出现的频率进行排序时,可以使用Python中的Counter类。
Counter类是什么
Counter是Python标准库collections中的一个类,它用来统计某些元素出现的次数。Counter类的对象有点像字典(dict)类型对象,但是它可以自动进行元素计数。Counter类中包含一些用于计算的方法,可以帮助我们统计元素的个数、排序等等。
Counter类的使用方法
创建Counter对象
我们可以通过直接创建一个空的Counter对象,然后再把列表或者字符串中的元素传递给它,如下所示:
from collections import Counter
lst = ["apple","banana","orange","apple","banana","apple"]
c = Counter(lst)
或者:
from collections import Counter
s = "abacbdbac"
c = Counter(s)
上面的代码将一个列表和一个字符串中的元素利用Counter类常用的构造函数进行了计数,并创建了Counter对象。其中,统计列表中的元素个数时,Counter对象统计的是每个元素出现的次数;而统计字符串中元素个数时,Counter对象统计的是每个字符出现的次数。
获取计数的元素
我们可以通过Counter类的elements()方法获取到每一个统计的元素,方法返回一个迭代器,其中的元素按出现次数从多到少排列:
for item in c.elements():
print(item)
输出结果为:
a
a
b
c
c
d
b
a
获取统计的元素的个数
可以使用len(c)方法获取统计的元素的数量,其中重复的元素只会计数一次,即不会将统计元素的个数和元素在序列中出现的次数相加:
print(len(c))
输出结果为:
4
获取元素出现的次数
可以使用[]运算符获取任意一个统计元素出现的次数,如果元素没有出现过,则返回零:
print(c["a"])
print(c["b"])
print(c["x"])
输出结果为:
3
2
0
获取统计元素的列表
可以使用most_common()方法获取统计元素的列表,列表中的元素按照它们出现的次数进行排序。most_common()方法返回的是一个元素及其计数值的元组(即一个二元组)的列表。可以指定列表的长度,返回制定长度的元素及其计数值列表:
print(c.most_common())
print(c.most_common(2))
输出结果为:
[('a', 3), ('b', 2), ('c', 2), ('d', 1)]
[('a', 3), ('b', 2)]
示例
下面给出一个简单的示例,统计字符串中出现次数最多的前N个字符:
from collections import Counter
s = "aabbcccddddd"
c = Counter(s)
n = 3
print("出现次数最多的前%d个字符如下:" % n)
for item in c.most_common(n):
print("字符 %s,出现次数:%d" % (item[0], item[1]))
输出结果为:
出现次数最多的前3个字符如下:
字符 d,出现次数:5
字符 c,出现次数:3
字符 a,出现次数:2
下面给出另一个示例,统计一个列表中各个元素出现的次数并排序:
from collections import Counter
lst = ["apple","banana","orange","apple","banana","apple"]
c = Counter(lst)
print("元素出现次数排序如下:")
for item in c.most_common():
print("元素 %s,出现次数:%d" % (item[0], item[1]))
输出结果为:
元素 apple,出现次数:3
元素 banana,出现次数:2
元素 orange,出现次数:1
总结
Python中的Counter类是一个十分方便的工具,可以方便地统计各种数据类型的元素出现次数,并按照出现的频率进行排序。掌握了Counter类的使用方法,我们能够更好地运用Python开发一些实用的工具。