[关闭]
@spiritnotes 2016-03-07T16:35:57.000000Z 字数 1568 阅读 1780

Python标准库学习 -- collections.Counter

Python


需求

在很多时候我们需要对一些可跌代项进行计数,统计里面各个值存在多少次,往往采用如下代码:

  1. # 通过迭代对象获得计数
  2. counter = {}
  3. for i in iterable:
  4. if i not in counter:
  5. counter[i] = 1
  6. else:
  7. counter[i] += 1
  8. top2 = sorted(counter.items(), key=lambda i:i[1], reverse=True)[:2]

一件很简单的事情却使用了这么多的代码,这个时候可以通过标准库中的collections.Counter直接解决。

Counter类

创建

  1. counter = Counter()
  2. counter_a = Counter(iterable)
  3. counter_b = Counter({4:5,5:4})
  4. counter_c= Counter(a=5,b=4)

访问

  1. def visit():
  2. from collections import Counter
  3. #访问单个元素
  4. iterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]
  5. counter_a = Counter(iterable)
  6. print(counter_a[4])
  7. print(counter_a[8]) #不存在返回0
  8. #访问次数最多
  9. print(counter_a.most_common(2)) #参数为空则返回所有

更新和减少

  1. def update():
  2. from collections import Counter
  3. #增加
  4. iterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]
  5. counter_a = Counter(iterable)
  6. counter_a.update(iterable)
  7. print(counter_a[4]) # 10
  8. counter_a.update(counter_a)
  9. print(counter_a[4]) # 20
  10. #减少
  11. counter_b = Counter(iterable)
  12. counter_a.subtract(counter_b)
  13. print(counter_a[4]) # 15

删除键

  1. def delete():
  2. from collections import Counter
  3. #删除
  4. iterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]
  5. counter_a = Counter(iterable)
  6. del counter_a[4]
  7. print(counter_a[4])

elements

用于返回含有所有元素的迭代器,其元素出现次数与Counter一致。

  1. def elements():
  2. from collections import Counter
  3. iterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]
  4. counter_a = Counter(iterable)
  5. print(list(counter_a.elements()))

移除负值和0

  1. def deleteNegtive():
  2. from collections import Counter
  3. iterable = [1,2,2,3,3,4,4,4,4,4,5,5,5,5,6]
  4. counter_a = Counter(iterable)
  5. counter_a[9] = -1
  6. counter_a[10] = 0
  7. print(counter_a.items())
  8. counter_a += Counter() # 移除0和负值
  9. print(counter_a.items())

其他操作

由于Counter其类似于字典,因此其也满足字典的部分操作。
- +、-、&、| 用于集合操作,返回&用于返回小值,|返回大值(已经有+用于取和)
- 可迭代,用以取键
- counter.values(), counter.items()与字典类似

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注