collections模块
00 min
2024-4-24
默认执行代码 import collection as col
collections模块实现了特定目标的容器, 以提供Python标准内建容器dict , list , set , 和 tuple 的替代选择。
1
创建命名元组子类的工厂函数
2
类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop)
3
类似字典(dict)的容器类,将多个映射集合到一个视图里面
4
字典的子类,提供了可哈希对象的计数功能
5
字典的子类,保存了他们被添加的顺序
6
字典的子类,提供了一个工厂函数,为字典查询提供一个默认值
7
封装了字典对象,简化了字典子类化
8
封装了列表对象,简化了列表子类化
9
封装了字符串对象,简化了字符串子类化
下面将重点讲解对象:
  • Counter()
  • defaultdict()
  • deque()

Counter对象

用于将可迭代对象中每个元素的个数以字典的形式保存,返回计数器对象
  • col.Counter('gallahad') → 返回字典子类, 记录各元素个数
    • 返回: Counter({'g': 1, 'a': 3, 'l': 2, 'h': 1, 'd': 1})
  • col.Counter(cats=4, dogs=8)
    • 返回: col.Counter({'cats': 4, 'dogs': 8})

计数器对象的相关方法

计数器对象通常可以使用字典的相关方法(除了fromkey和update不可以),另外还提供了三个独有的方法
  • elements() 返回一个迭代器,可迭代出元素(重复元素按个数迭代)
  • most_common([n]) 返回n个计数最多的元素,以列表包裹元组[(key, value), …]形式返回。如果省略n或为None,则most common()返回计数器中的所有元素
  • subtract([iterable-or-mapping]) 从迭代对象 或 映射对象 减去元素出现个数。像 dict.update() 但是是减去,而不是替换。输入和输出都可以是0或者负数。

计数器对象富比较运算

在3.10版本之后, 计数对象支持相等性、子集和超集关系等富比较运算符: 
  • ==!=<<=>>= 等大小比较符
  • &, - 等集合元算符
所有这些检测会将不存在的元素当作计数值为零,因此 Counter(a=1) == Counter(a=1, b=0) 将返回真值。

defaultdict对象

使用dict[key]时,若key不存在则报错;使用dict.get(key[, default])时,若key不存在则会返回一个默认值default。
初始化defaultdict会接收一个工厂函数作为参数,然后生成一个字典容器。
defaultdict传入工厂函数可以是list、set、str等等,作用是当key不存在时,返回的value是工厂函数的默认值,比如list对应[ ],str对应的是空字符串,set对应set( ),int对应0。defaultdict是python内建dict类的一个子类,功能与dict相同,但它带有一个默认的值,若key值不存在时返回一个默认的值。