Python-Collections模块之Counter

Counter : dict的子类,用于计算可hash的对象

一、Counter : 可以支持方便、快速的计数

from collections import Counter
cnt = Counter()
wordList = ["a","b","c","c","a","a"]
for word in wordList:
    cnt[word] +=1
print(cnt)
#执行结果: Counter({'a': 3, 'c': 2, 'b': 1})

c = Counter()
c = Counter('geadsafdsa')#从可迭代的字符串初始化counter
print(c)    #Counter({'a': 3, 'd': 2, 's': 2, 'g': 1, 'e': 1, 'f': 1})
c = Counter({'red':4,'blue':2})#从映射初始化counter
print(c)
c = Counter(cats = 8,dogs = 4)#从args初始化counter
print(c)
c = Counter(['eggs', 'ham'])
print(c['apples'])      #如某个项缺失,会返回0,不会报错
#执行结果 : 0
print(c)
#执行结果: Counter({'eggs': 1, 'ham': 1})
c['eggs'] = 0
print(c)
#执行结果: Counter({'ham': 1, 'eggs': 0})

二、Counter对象支持以下三个字典不支持的方法,elements(),most_common(),subtract(),update();

1、Counter.elements(): 返回一个迭代器,每个元素重复的次数为它的数目,顺序是任意的顺序,如果一个元素的数目少于1,那么elements()就会忽略它

c = Counter(a=2, b=4, c=0, d=-2, e=1)
print(list(c.elements()))
#执行结果:['a', 'a', 'b', 'b', 'b', 'b', 'e']

2、Counter.most_common() :返回一个列表,包含counter中n个最大数目的元素,如前三个。。。如果忽略n或者为None,most_common()将会返回counter中的所有元素,元素有着相同数目的将会以任意顺序排列

c = Counter('agagagarewqrwq').most_common(3)
print(c)
#执行结果: [('a', 4), ('g', 3), ('r', 2)]
c = Counter('agagagarewqrwq').most_common()
print(c)
#执行结果: [('a', 4), ('g', 3), ('r', 2), ('w', 2), ('q', 2), ('e', 1)]
c = Counter('agagagarewqrwq').most_common(None)
print(c)
#执行结果: [('a', 4), ('g', 3), ('r', 2), ('w', 2), ('q', 2), ('e', 1)]

3、Counter.subtract(): 从一个可迭代对象中或者另一个映射(或counter)中,元素相减,类似于dict.update(),但是substracts数目相减而不是替换它们,输入输出都有可能为0或者为负

c = Counter(a=4, b=2, c=0, d=-2)
d = Counter(a=1, b=2, c=-3, d=4)
c.subtract(d)
print(c)
#执行结果:Counter({'a': 3, 'c': 3, 'b': 0, 'd': -6})

4、Counter.update(): 两个可迭代对象元素相加,可迭代对象是一个元素序列,而非(key,value)对构成的序列

c = Counter(a=4, b=2,c=0, d=-2)
d = Counter(a=1, b=2, c=-3, d=4)
c.update(d)

print(c)
#执行结果: Counter({'a': 5, 'b': 4, 'd': 2, 'c': -3})
 

5、Counter对象常见操作

#1、统计所有的数目
c = Counter({'a': 5, 'b': 4, 'd': 2, 'c': -3})
print(sum(c.values()))      #统计所有的数目

#2、列出所有的去重后的元素
c = Counter('bafdsagdsafdsa')
print(c)    #Counter({'a': 4, 'd': 3, 's': 3, 'f': 2, 'b': 1, 'g': 1})
a = list(c)
print(a)
#执行结果: ['b', 'a', 'f', 'd', 's', 'g']

#转换为set,dict,list
c = Counter('bafdsagdsafdsa')
dict = dict(c)
print(dict)      #{'b': 1, 'a': 4, 'f': 2, 'd': 3, 's': 3, 'g': 1}

s = set(c)
print(s)    #{'g', 'a', 'f', 'd', 's', 'b'}

list = list(c.items())
print(list)
#执行结果:[('b', 1), ('a', 4), ('f', 2), ('d', 3), ('s', 3), ('g', 1)]

#删除数目为0和为负的元素
c = Counter({'a': 5, 'b': 4, 'd': 2, 'c': -3})
c += Counter()
print(c)
#执行结果: Counter({'a': 5, 'b': 4, 'd': 2})

#清空counter
b = Counter({'a': 5, 'b': 4, 'd': 2, 'c': -3})
b.clear()
print(b)

#在Counter对象中进行数学操作
c = Counter(a=3, b=1, c=-2)
d = Counter(a=1, b=2, c=4)
print(c + d)     # 求和, Counter({'a': 4, 'b': 3, 'c': 2})
print(c - d)     #求差,Counter({'a': 2})    可以减,但不输出为0或者为负的元素个数
print(c & d)   #求交集    Counter({'a': 1, 'b': 1})
print(c | d)   #求并集  Counter({'c': 4, 'a': 3, 'b': 2})


三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
原文地址:https://www.cnblogs.com/deeptester-vv/p/14948994.html