Python 用Counter做映射

  • Post category:Python

当我们需要将一个列表或字符串中某些元素出现的次数统计出来,并且按照这些元素出现的频率进行排序时,可以使用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开发一些实用的工具。