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

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

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 |

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

相关推荐
带鱼吃猫2 分钟前
C++STL:从 0 到 1 手写 C++ string以及高频易错点复盘
开发语言·c++
u0109272713 分钟前
代码覆盖率工具实战
开发语言·c++·算法
码云数智-大飞6 分钟前
零拷贝 IPC:用内存映射文件打造 .NET 高性能进程间通信队列
java·开发语言·网络
懈尘9 分钟前
深入理解Java的HashMap扩容机制
java·开发语言·数据结构
Beginner x_u12 分钟前
JavaScript 核心知识索引(面试向)
开发语言·javascript·面试·八股
yqd66613 分钟前
RabbitMQ用法和面试题
java·开发语言·面试
BYSJMG14 分钟前
2026计算机毕设推荐:基于大数据的车辆二氧化碳排放量可视化分析系统
大数据·vue.js·python·mysql·django·课程设计
白日梦想家68118 分钟前
JavaScript性能优化实战系列(三篇完整版)
开发语言·javascript·性能优化
请注意这个女生叫小美19 分钟前
C语言 实例20 25
c语言·开发语言·算法
fundroid20 分钟前
Kotlin 泛型进阶:in、out 与 reified 实战
android·开发语言·kotlin