Python - collections 模块 - 内置的集合类模块

目录

一、collections 简介

二、namedtuple - 函数创建自定义元祖类型

三、deque - 队列和栈的实现

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:
          
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值