Python中的Counter

Counter 的用处

提供一种简洁的计数方法。

Counter 的 Import

from collections import Counter

Collections是一个集成了List、Dict、Purple、Set的拓展和替代品的模块。

image-20221227084708096

Counter

Counter是dict的子类,因此也像dict一样具有键和值,其中键表示元素,值表示元素出现的次数。

初始化

可以直接初始化,也可以从iterable 型,map 型或者keyword args 型中初始化。

c = Counter()                           # a new, empty counter
c = Counter('gallahad')                 # a new counter from an iterable,即统计'gallahad'中各元素出现次数
c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping,见elements方法
c = Counter(cats=4, dogs=8)             # a new counter from keyword args,见elements方法

初始化之后,可以按照字典的方式查询每个元素出现的次数。例如,用一个列表初始化Counter

c = Counter(['a','b','c','v','s', 'a'])
c['a']

输出结果为 2 ,如果要统计的元素不存在,那么返回的值是0,而不会像字典一样报错。如:

c = Counter(['a','b','c','v','s', 'a'])
c['d']

输出结果为0。

注意,和字典赋值一样,Counter也可以令某一个元素计数值为0,但并不会从Counter里将其删去。更进一步,这也说明Counter的值(计数值)可以为0甚至负数。

要想删去某个元素,应使用del c['某元素'] ,其中c是Counter实例。

附加方法

除了继承dict的一些方法外,Counter有一些附加方法

elements()

返回一个迭代器,其中每个元素将重复出现计数值所指定次。 元素会按首次出现的顺序返回。 如果一个元素的计数值小于一,elements() 将会忽略它。

例如:

c = Counter(cats=4, dogs=8)
for i in c.elements():
    print(i, end=' ') 

输出结果是 cats cats cats cats dogs dogs dogs dogs dogs dogs dogs dogs

most_common([n])

返回一个列表,其中包含 n 个最常见的元素及出现次数,按常见程度由高到低排序。 如果 n 被省略或为 返回计数器中的所有元素。计数值相等的元素按首次出现的顺序排序。

例如:

c = Counter('gallahad')         
print(c.most_common())

结果:[('a', 3), ('l', 2), ('g', 1), ('h', 1), ('d', 1)]

total()

总的计数值。大部分场景下相当于len

c = Counter(a=10, b=5, c=0)
c.total()

输出15

注意:这是3.10出才出现的用法!

其余一些常见操作

c.total()                       # total of all counts
c.clear()                       # reset all counts
list(c)                         # list unique elements
set(c)                          # convert to a set
dict(c)                         # convert to a regular dictionary
c.items()                       # convert to a list of (elem, cnt) pairs
Counter(dict(list_of_pairs))    # convert from a list of (elem, cnt) pairs
c.most_common()[:-n-1:-1]       # n least common elements
+c                              # remove zero and negative counts

一些数学计算

加法和减法运算是通过增加或减少相应元素的计数值来合并计数器。

交集和并集运算是返回相应计数的最小值和最大值。 相等和包括运算是对相应计数进行比较。

每种运算都可接受带符号计数的输入,但输出将排除计数为零或小于零的结果。

单目加和减(一元操作符)意思是从空计数器加或者减去。

c = Counter(a=3, b=1)
d = Counter(a=1, b=2)

c + d						# add two counters together:  c[x] + d[x]  返回 Counter({'a': 4, 'b': 3})
c - d                        # subtract (keeping only positive counts)  返回Counter({'a': 2})
c & d						# intersection:  min(c[x], d[x])  返回Counter({'a': 1, 'b': 1})
c | d                         # union:  max(c[x], d[x])  返回Counter({'a': 3, 'b': 2})
c == d                     # equality:  c[x] == d[x]  返回 False
c <= d                     # inclusion:  c[x] <= d[x]  返回 False

+c							 # 返回 Counter({'a': 3, 'b': 1})(可利用这个消去Counter中的计数值为0或负的元素)
-c							  # 返回 Counter()

参考

class collections.Counter([iterable-or-mapping])

posted on 2022-12-27 16:23  VicoZhang  阅读(984)  评论(0编辑  收藏  举报

导航