Python 用Counter做映射

  • Post category:Python

Counter是Python标准库collections中的一个类,用于统计序列中元素的出现次数。Counter对象可以实现序列元素的映射,并且提供了一些常用的字典操作函数。

在使用Counter之前,需要首先导入collections模块。

import collections

接下来,下面是Counter的具体使用方法。

创建Counter对象

使用Counter来创建一个映射,可以通过将序列转换为Counter对象来实现:

from collections import Counter
a = [1,2,3,1,2,1]
counter_a = Counter(a)
print(counter_a)
#Counter({1: 3, 2: 2, 3: 1})

更新Counter对象

Counter还提供了update方法,可以用于将另一个可迭代对象的元素计数与原有的Counter对象合并:

from collections import Counter
a = Counter([1,2,3,1,2,1])
b = [1,2,3,4,5,1,2]
a.update(b)
print(a)
# Counter({1: 4, 2: 3, 3: 2, 4: 1, 5: 1})

访问Counter对象中的元素

Counter对象支持字典的基本操作,可以使用下标来访问元素的计数:

from collections import Counter
a = Counter([1,2,3,1,2,1])
print(a[1]) # 3

Counter的常用操作函数

elements()

elements函数可以根据计数返回集合中的元素,返回值是一个迭代器:

from collections import Counter
a = Counter([1,2,3,1,2,1])
print(list(a.elements())) # [1, 1, 1, 2, 2, 3]

most_common(n)

most_common函数返回n个元素和其对应的计数,按照计数的从大到小的顺序排列:

from collections import Counter
a = Counter([1,2,3,1,2,1,4,4,4,4,4])
print(a.most_common(2)) # [(4, 5), (1, 3)]

subtract()

subtract函数可以将两个Counter相减,得到一个新的Counter:

from collections import Counter
a = Counter([1,2,3,1,2,1,4,4,4,4,4])
b = Counter([1,2,4,4,4])
a.subtract(b)
print(a) # Counter({1: 2, 2: 1, 3: 1, 4: 1})

示例

例子1

  • 需求:统计字符串中每个字符出现的次数
from collections import Counter
s = 'hello,world!'
sc = Counter(s)
print(sc)
# Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ',': 1, 'w': 1, 'r': 1, 'd': 1, '!': 1})

例子2

  • 需求:计算两个字符串中相同元素的出现次数
from collections import Counter
s1 = 'hello'
s2 = 'world'
c1 = Counter(s1)
c2 = Counter(s2)
c = c1 & c2
print(c) # Counter({'l': 2, 'o': 1})

以上是Python使用Counter做映射的完整攻略,包含了常见的用法及操作函数,并提供了两个示例说明。