一、什么是“特殊的序列类”?
- 指的是 Python 标准库
collections模块中提供的高级数据结构,它们在功能、效率或语法上对内置的列表、字典、元组等序列类型进行了扩展和补充。 - 这些类包括:
namedtuple、deque、Counter、OrderedDict、defaultdict、ChainMap等。
二、常见的特殊序列类及其作用
1. namedtuple
- 作用:为元组(tuple)添加字段名,使其可以像对象一样通过属性访问元素。
- 用途:让代码更具可读性,适合用来表示结构化数据。
- 示例:
from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(1, 2) print(p.x, p.y) # 1 2
2. deque(双端队列)
- 作用:高效实现队列和栈操作,可以在两端 O(1) 时间插入和删除元素。
- 用途:适合需要频繁在头尾增删元素的场景,如队列、滑动窗口等。
- 示例:
from collections import deque d = deque([1, 2, 3]) d.appendleft(0) d.append(4) print(d) # deque([0, 1, 2, 3, 4]) d.pop() d.popleft()
3. Counter
- 作用:用于计数,统计元素出现的次数,返回字典形式。
- 用途:快速统计、频率分析、词频统计等。
- 示例:
from collections import Counter c = Counter('abracadabra') print(c) # Counter({'a': 5, 'b': 2, 'r': 2, 'c': 1, 'd': 1}) print(c.most_common(2)) # [('a', 5), ('b', 2)]
4. OrderedDict
- 作用:有序字典,记住元素插入顺序(Python 3.7+ 内置 dict 也已保持有序)。
- 用途:需要顺序敏感的字典操作时。
- 示例:
from collections import OrderedDict od = OrderedDict() od['a'] = 1 od['b'] = 2 print(od) # OrderedDict([('a', 1), ('b', 2)])
5. defaultdict
- 作用:为字典提供默认值,访问不存在的键时自动创建并赋默认值。
- 用途:避免 KeyError,适合分组、计数等场景。
- 示例:
from collections import defaultdict dd = defaultdict(list) dd['a'].append(1) print(dd['a']) # [1] print(dd['b']) # [],自动创建
6. ChainMap
- 作用:将多个字典或映射合并为一个视图,查找时按顺序依次查找。
- 用途:多级配置、作用域链等。
- 示例:
from collections import ChainMap a = {'x': 1, 'y': 2} b = {'y': 3, 'z': 4} cm = ChainMap(a, b) print(cm['y']) # 2(优先查找第一个字典) print(cm['z']) # 4
三、这些特殊序列类的优势
- 功能更丰富:如
Counter直接支持计数,deque支持高效两端操作。 - 代码更简洁:如
defaultdict省去判断键是否存在的代码。 - 效率更高:如
deque在两端插入删除比 list 快得多。 - 可读性更强:如
namedtuple让元组有名字,代码更易懂。
四、应用场景举例
- 数据分析:
Counter统计词频,defaultdict分组聚合。 - 算法实现:
deque实现队列、滑动窗口、BFS等。 - 配置管理:
ChainMap合并多级配置。 - 结构化数据:
namedtuple代替简单的类或结构体。
五、总结
- Python 的特殊序列类(主要在
collections模块中)为内置的 list、dict、tuple 提供了更强大、更高效、更灵活的补充。 - 掌握这些工具,可以让你的代码更简洁、性能更好、功能更丰富。
2152

被折叠的 条评论
为什么被折叠?



