1. 简介
Python中的内置模块collections中提供了一个Counter类,用于计算可迭代对象中元素的个数,并返回一个字典,其中键为元素,值为元素的计数。Counter是一个非常有用的工具,可用于快速计算频率分布。本文将介绍collections.Counter() 的具体使用方法。
2. Counter()函数的基本用法
下面是Counter()函数的基本用法:
from collections import Counter
# 对列表中的元素进行计数
lst = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
count = Counter(lst)
print(count)
# Counter({'apple': 3, 'banana': 2, 'orange': 1})
# 对字符串中字符进行计数
string = 'abcbdbdbbrqqaali'
count = Counter(string)
print(count)
# Counter({'b': 4, 'a': 3, 'd': 3, 'r': 2, 'q': 1, 'c': 1, 'l': 1, 'i': 1})
从上面的例子中可以看出,collections.Counter()可以接受任何可迭代对象。
3. Counter的常用方法
3.1 elements()
elements()方法返回一个迭代器,其中元素重复出现的次数与它在Counter的内部表示中出现的次数相同。 如果元素的计数少于等于零,则此方法不返回该元素。返回的元素顺序是无序的。
# 对字符串中字符进行计数
string = 'abcbdbdbbrqqaali'
count = Counter(string)
# 获取迭代器
element_iter = count.elements()
# 输出元素
print(list(element_iter))
输出结果:
['a', 'a', 'a', 'b', 'b', 'b', 'b', 'c', 'd', 'd', 'd', 'i', 'l', 'q', 'r', 'r']
3.2 most_common()
most_common()方法返回一个列表,其中包含n个最常见的元素和它们的计数,按常见顺序排序。 如果n省略或为None,则返回计数器中的所有元素。 如果计数相等,则元素以与原始输入相同的顺序返回。返回的列表具有以下属性:
列表中的元素是一个元组,第一个元素为元素,第二个元素为元素的计数。
列表的长度不大于n。如果计数相等,则元素以与原始输入相同的顺序返回。
# 对字符串中字符进行计数
string = 'abcbdbdbbrqqaali'
count = Counter(string)
# 获取n个最常见元素及它们的计数
top_three = count.most_common(3)
# 打印结果
print(top_three)
# [('b', 4), ('a', 3), ('d', 3)]
3.3 update()
update()方法用于更新地一个计数器(或多个计数器),其元素是相同类型的可迭代对象。 如果任何元素的计数小于等于零,则从计数器中删除该元素。
# 计数器 1
count1 = Counter("hello")
# 计数器 2
count2 = Counter("world")
# 更新计数器 count1
count1.update(count2)
print(count1)
# Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, 'w': 1, 'r': 1, 'd': 1})
可以看出,在更新之后,count1 改变了。
3.4 subtract()
subtract()方法从正在调用的计数器(或多个计数器)中将元素的计数减去。 从计数器中删除任何元素的计数少于或等于零。 通常可以在其他计数器中保存元素并以负数添加它们以进行减法。
# 计数器 1
count1 = Counter("hello")
# 计数器 2
count2 = Counter("world")
# 从计数器count1减去计数器count2
count1.subtract(count2)
print(count1)
# Counter({'l': 2, 'h': 1, 'e': 1, 'd': -1, 'r': -1, 'o': -1, 'w': -1})
可以看出,从计数器count1中减去计数器count2之后,许多元素的计数变成了负数。
4. 结语
这篇文章介绍了Python中collections.Counter()的具体用法,并且讲解了该函数的常用方法,如elements()、most_common()、update()、subtract()等。这些方法的灵活性使得Counter成为快速计算频率分布非常有用的工具。