Counter 的用处
提供一种简洁的计数方法。
Counter 的 Import
from collections import Counter
Collections是一个集成了List、Dict、Purple、Set的拓展和替代品的模块。
![image-20221227084708096](/i/l/?n=23&i=blog/3060244/202212/3060244-20221227162218461-695882747.png)
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])
标签:返回,Counter,Python,元素,elements,cats,dogs From: https://www.cnblogs.com/VicoZhang/p/17008342.html