collections

【万字长文详解】Python库collections,让你击败99%的Pythoner - 知乎 (zhihu.com)

提供了标准数据结构以外的高级数据结构

子类 功能
Counter 字典的子类,提供了可哈希对象的计数功能
namedtuple() 创建命名元组子类的工厂函数,生成可以使用名字来访问元素内容的tuple子类
deque 类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)
ChainMap 类似字典(dict)的容器类,将多个映射集合到一个视图里面
OrderedDict 字典的子类,保存了他们被添加的顺序,有序字典
defaultdict 字典的子类,提供了一个工厂函数,为字典查询提供一个默认值
UserDict 封装了字典对象,简化了字典子类化
UserList 封装了列表对象,简化了列表子类化
UserString 封装了字符串对象,简化了字符串子类化(中文版翻译有误)

计数器 - Counter

> Counter('gallahad') 
Counter({'g': 1, 'a': 3, 'l': 2, 'h': 1, 'd': 1})

> Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
Counter({'red': 2, 'blue': 3, 'green': 1})

Counter (除了dict的方法外)有三个方法:

  1. elements() 返回一个迭代器,其中每个元素将重复出现计数值所指定次。 元素会按首次出现的顺序返回。 如果一个元素的计数值小于1,elements() 将会忽略它。
  2. most_common(n = None) 返回一个列表,其中包含n个最常见的元素及出现次数,按常见程度由高到低排序。 如果 n 被省略或为None,most_common() 将返回计数器中的所有元素,计数值相等的元素按首次出现的顺序排序,经常用来计算top词频的词语。
  3. subtract(Counter or other...) 从迭代对象或映射对象减去元素
> str0 = Counter({'a': 2, 'b': 2, 'c': 2, 'd': 2, 'e': 1})
> str0.subtract('abcd')
> str0
Counter({'a': 1, 'b': 1, 'c': 1, 'd': 1, 'e': 1}

> c = Counter(a=4, b=2, c=0, d=-2), d = Counter(a=1, b=2, c=3, d=4)
> c.subtract(d)
> c
Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

Counter 也支持 + - & | 运算

双向队列 - deque

append()
appendleft()
clear()
copy() 创建一份浅拷贝
count(x) 计算 deque 中元素等于 x 的个数。