目录
3-1 deque(maxlen = N) 固定长度的队列应用
四、defaultdict - 字典类型,若查找的key不存在,不报错而返回默认值。
五、OrderedDict - 字典类型,保持字典内key顺序按照插入的顺序排列
六、Counter - 字典类型,查询对象的出现次数,以字典方式存储
七、ChainMap - 管理多个映射对象,对外表现单独的映射结构
一、collections 简介
这个模块实现了特定目标的容器,以提供Python标准内建容器 dict、list、set、tuple 的替代选择。
nametuple() 创建命名元组子类的工厂函数 deque 类似列表的容器,但是实现了两端的快去添加(append)和删除(pop) ChainMap 类字典,将多个映射集合到一个视图里面 Counter 字典的子类,提供了可hashUI想的计数功能 OrderedDict 字典的子类,保存了被添加的顺序 defaultdict 字典的子类,提供了一个工厂函数,为字典查询提供一个默认值 UserDict 封装了字典对象,简化了字典子类化 UserList 封装了列表对象,简化了列表子类化 UserString 封装了列表对象,简化了字符串子类化
二、namedtuple - 函数创建自定义元祖类型
collections.namedtuple(typename, field_names, *, rename=False, defaults=None, module=None) # 创建元组表示点的坐标 point = collections.namedtuple('point',['x','y']) p = point(1,2) print(p.x,p.y) # 创建元组表示圆的坐标和半径 circle = collections.namedtuple('circle',['x','y','r']) c = circle(0,0,4) print(c.x,c.y,c.r)
三、deque - 队列和栈的实现
队列 vs 列表:队列两端添加或弹出元素,复杂度都为O(1);列表的头部插入或移除元素,复杂度为O(N)
# 创建deque类型的列表 deq = collections.deque(['a','b','c']) print(deq) # 正常插入右端数据 deq.append(1) print(deq) # 插入左端数据 deq.appendleft(2) print(deq) # 正常删除右端数据 deq.pop() print(deq) # 删除左端数据 deq.popleft() print(deq)
3-1 deque(maxlen = N) 固定长度的队列应用
固定队列,当有新纪录加入已满队列时,会自动移除最老的记录,以插入新记录
使用固定队列的优点(相比列表上的手动append和del):较为优雅、运行速度快
from collections import deque # 对 lines 文本行进行 pattern 关键词匹配,并输出当前匹配行以及最后检查的 history 行文本 # 仅返回第一个匹配成功的生成器对象 def search(lines, pattern, history=5): previous_line = deque(maxlen=history) for line in lines: # 若关键词在文本行内,yield 跳出循环,返回生成器对象 if pattern in line: