@spiritnotes
2016-03-07T16:35:57.000000Z
字数 1568
阅读 2087
Python
在很多时候我们需要对一些可跌代项进行计数,统计里面各个值存在多少次,往往采用如下代码:
# 通过迭代对象获得计数counter = {}for i in iterable:if i not in counter:counter[i] = 1else:counter[i] += 1top2 = 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]) # 10counter_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 Counteriterable = [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 Counteriterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]counter_a = Counter(iterable)counter_a[9] = -1counter_a[10] = 0print(counter_a.items())counter_a += Counter() # 移除0和负值print(counter_a.items())
由于Counter其类似于字典,因此其也满足字典的部分操作。
- +、-、&、| 用于集合操作,返回&用于返回小值,|返回大值(已经有+用于取和)
- 可迭代,用以取键
- counter.values(), counter.items()与字典类似
