@spiritnotes
2016-03-07T16:35:57.000000Z
字数 1568
阅读 1932
Python
在很多时候我们需要对一些可跌代项进行计数,统计里面各个值存在多少次,往往采用如下代码:
# 通过迭代对象获得计数
counter = {}
for i in iterable:
if i not in counter:
counter[i] = 1
else:
counter[i] += 1
top2 = sorted(counter.items(), key=lambda i:i[1], reverse=True)[:2]
一件很简单的事情却使用了这么多的代码,这个时候可以通过标准库中的collections.Counter直接解决。
counter = Counter()
counter_a = Counter(iterable)
counter_b = Counter({4:5,5:4})
counter_c= Counter(a=5,b=4)
def visit():
from collections import Counter
#访问单个元素
iterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]
counter_a = Counter(iterable)
print(counter_a[4])
print(counter_a[8]) #不存在返回0
#访问次数最多
print(counter_a.most_common(2)) #参数为空则返回所有
def update():
from collections import Counter
#增加
iterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]
counter_a = Counter(iterable)
counter_a.update(iterable)
print(counter_a[4]) # 10
counter_a.update(counter_a)
print(counter_a[4]) # 20
#减少
counter_b = Counter(iterable)
counter_a.subtract(counter_b)
print(counter_a[4]) # 15
def delete():
from collections import Counter
#删除
iterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]
counter_a = Counter(iterable)
del counter_a[4]
print(counter_a[4])
用于返回含有所有元素的迭代器,其元素出现次数与Counter一致。
def elements():
from collections import Counter
iterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]
counter_a = Counter(iterable)
print(list(counter_a.elements()))
def deleteNegtive():
from collections import Counter
iterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]
counter_a = Counter(iterable)
counter_a[9] = -1
counter_a[10] = 0
print(counter_a.items())
counter_a += Counter() # 移除0和负值
print(counter_a.items())
由于Counter其类似于字典,因此其也满足字典的部分操作。
- +、-、&、| 用于集合操作,返回&用于返回小值,|返回大值(已经有+用于取和)
- 可迭代,用以取键
- counter.values(), counter.items()与字典类似