Python collections
参考链接 https://docs.python.org/zh-cn/3/library/collections.html#collections.namedtuple
collections是Python内建的一个集合模块,提供了许多有用的集合类。这个模块实现了特定目标的容器,以提供Python标准内建容器 dict
, list
, set
, 和 tuple
的替代选择。
namedtuple() | 创建命名元组子类的工厂函数 |
deque | 类似列表(list)的容器,实现了在两端快速添加(append)和弹出(pop) |
ChainMap | 类似字典(dict)的容器类,将多个映射集合到一个视图里面 |
Counter | 字典的子类,提供了可哈希对象的计数功能 |
OrderedDict | 字典的子类,保存了他们被添加的顺序 |
defaultdict | 字典的子类,提供了一个工厂函数,为字典查询提供一个默认值 |
UserDict | 封装了字典对象,简化了字典子类化 |
UserList | 封装了列表对象,简化了列表子类化 |
UserString | 封装了列表对象,简化了字符串子类化 |
1 namedtuple()
命名元组赋予每个位置一个含义,提供可读性和自文档性。它们可以用于任何普通元组,并添加了通过名字获取值的能力,通过索引值也是可以的。
from collections import namedtuple #info = namedtuple("info",'age,addr') #可以引号引起来,或者空格格隔起来,或者['x','y'] 这样。 #info = namedtuple("info",'age addr') info = namedtuple("info",['age','addr']) zhangsan = info(20,"shanxi") print zhangsan.age,zhangsan.addr #输出的是 20 shanxi
_make 类方法从存在的序列或迭代实例创建一个新实例。
list = [40,"jiangsu"]
print info._make(zhangsan) # 输出info(age=20, addr='shanxi')
print info._make(list) # 输出 info(age=40, addr='jiangsu')
getattr 获取名字域的值
print getattr(zhangsan,'age') # 输出 20
2 deque
使用list
存储数据时,按索引访问元素很快,但是插入和删除元素就很慢了,因为list
是线性存储,数据量大的时候,插入和删除效率很低。
deque是为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
from collections import deque list = deque(['a','b','c','d'],3) # 这个3 指的是 maxlen 最大长度
print list #输出 deque(['b', 'c', 'd'], maxlen=3) 注意将最左端的 ‘a’ 弹出。只保留右边部分
如果 maxlen 没有指定或者是 None
,deques 可以增长到任意长度。否则,deque就限定到指定最大长度。一旦限定长度的deque满了,当新项加入时,
同样数量的项就从另一端弹出。限定长度deque提供类似Unix filter tail
的功能。它们同样可以用与追踪最近的交换和其他数据池活动。
list = deque(['a','b','c','d'])
list.append("kk") # 从右边添加 输出 deque(['a', 'b', 'c', 'd', 'kk'])
list.appendleft("kk") #从左边添加 输出 deque(['kk', 'a', 'b', 'c', 'd'])
list.pop() #去除最右边的元素 输出 deque(['a', 'b', 'c'])
list.popleft()
#去除最左边的元素 deque(['b', 'c', 'd']) list_2 = ['tt','gg']
list.extend(list_2) # 输出deque(['a', 'b', 'c', 'd', 'tt', 'gg']) 扩展deque的右侧,通过添加iterable参数中的元素。 list.extendleft(list_2) #输出 deque(['gg', 'tt', 'a', 'b', 'c', 'd']) 扩展deque的左侧,通过添加iterable参数中的元素。注意,左添加时,在结果中iterable参数中的顺序将被反过来添加
print list.count('a') #输出 1 计算deque中个数等于 x 的元素。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程