当前位置: 首页 > news >正文

如何使用Python中的collections模块提供的数据结构,如deque、Counter、OrderedDict等

Python 的 collections 模块提供了一些额外的数据结构,这些数据结构在内置的数据类型(如列表、字典、集合等)的基础上,增加了额外的功能或优化了性能。下面是如何使用 collections 模块中的 dequeCounter 和 OrderedDict 这三种数据结构的简单示例。

1. deque(双端队列)

deque(发音为“deck”)是一个线程安全、快速添加/删除元素于两端的线性容器。它支持从两端快速添加和删除元素,时间复杂度为 O(1)。

 

python复制代码

from collections import deque
# 创建一个 deque
d = deque('ghi')
# 添加元素到右端
d.append('j')
d.append('k')
# 添加元素到左端
d.appendleft('f')
d.appendleft('e')
# 打印 deque
print(d) # 输出: deque(['e', 'f', 'g', 'h', 'i', 'j', 'k'])
# 从右端移除元素
print(d.pop()) # 输出: 'k'
# 从左端移除元素
print(d.popleft()) # 输出: 'e'

2. Counter(计数器)

Counter 是一个字典子类,用于计数可哈希对象。它是一个字典,其中元素被当作字典键,它们的计数被存储为字典值。

 

python复制代码

from collections import Counter
# 创建一个 Counter
c = Counter('gallahad')
# 输出 Counter
print(c) # 输出: Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})
# 更新计数器
c.update('admiral')
# 输出更新后的 Counter
print(c) # 输出: Counter({'a': 4, 'd': 2, 'l': 2, 'g': 1, 'm': 1, 'i': 1, 'r': 1, 'h': 1})
# 获取某个元素的计数
print(c['a']) # 输出: 4
# 获取元素计数并删除该元素(如果计数为 0,则不执行删除)
print(c.pop('d')) # 输出: 2
# 输出更新后的 Counter
print(c) # 输出: Counter({'a': 4, 'l': 2, 'g': 1, 'm': 1, 'i': 1, 'r': 1, 'h': 1})

3. OrderedDict(有序字典)

OrderedDict 是一个字典子类,它保持了元素被插入时的顺序。当迭代 OrderedDict 时,元素的顺序与它们被插入时的顺序相同。

 

python复制代码

from collections import OrderedDict
# 创建一个 OrderedDict
d = OrderedDict()
d['foo'] = 1
d['bar'] = 2
d['spam'] = 3
d['grok'] = 4
# 迭代并打印 OrderedDict
for key in d:
print(key, d[key])
# 输出:
# foo 1
# bar 2
# spam 3
# grok 4
# 插入一个新的键值对到有序字典的开始
d.move_to_end('foo', last=False)
# 再次迭代并打印
for key in d:
print(key, d[key])
# 输出:
# foo 1
# bar 2
# spam 3
# grok 4

这些数据结构在需要特定功能的场景下非常有用,如需要维护插入顺序的字典、需要快速从两端添加/删除元素的列表,或者需要计数可哈希对象的场景。

http://www.lryc.cn/news/368074.html

相关文章:

  • 2024年道路安全员考试题库
  • 自建 Docker 镜像
  • php实现抖音小程序支付
  • 代码审计(1):CVE-2022-4957分析及复现
  • 问题:设备管理指标为完好率不低于( ),待修率不高于5%,事故率不高于1%。 #知识分享#经验分享#经验分享
  • 【Linux】(六)—— vim编辑器
  • 06016传感器原理与应用202207
  • java web:springboot mysql开发的一套家政预约上门服务系统源码:家政上门服务系统的运行流程
  • 二叉树的后序遍历-力扣
  • C++基础编程100题-008 OpenJudge-1.3-06 甲流疫情死亡率
  • 计算机网络 ——网络层(IPv4地址)
  • 重写mybatisPlus自定义ID生成策略
  • 华为坤灵路由器配置SSH
  • 盘点一个Python网络爬虫的实战问题
  • 100道面试必会算法-32-二叉树右视图用栈实现队列
  • ⽀付逻辑漏洞思路⼩集合
  • 嵌入式学习——Linux高级编程复习(线程)——day40
  • kvm管理工具-virsh
  • VisionPro的应用和入门教程
  • 整数规划问题算法例子
  • C#启动一个cmd.exe多次随时输入命令并获取输出
  • 持续总结中!2024年面试必问 20 道分布式、微服务面试题(五)
  • Android输入法IME(三)之 管理端(IMMS)启动流程
  • elasticsearch安装与使用(4)-搜索入门
  • 【UML用户指南】-12-对高级结构建模-接口、类型和角色
  • C++笔试强训day42
  • Docker 中运行的 MySQL 数据库与 Docker 外部的管理系统连接
  • 10 设备树
  • 【架构分析】GPU执行GEMM矩阵运算实例演示
  • 从《千脑智能》看大模型