默认执行代码import collection as col
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值不存在时返回一个默认的值。