2026-04-15 12:33:37
collections模块是Python中一个强大的工具库,提供了多种高效的数据结构,能够显著提升代码的简洁性和执行效率。 以下是对该模块核心功能的详细解析:
一、模块概述模块作用
官方定义:提供标准内建容器(如dict、list、set、tuple)的替代选择,实现特定目标的容器。
通俗理解:扩展内置数据类型的功能,例如OrderedDict支持有序字典,Counter用于高效计数。掌握后可简化代码逻辑,提升开发效率。
模块子类通过collections.__all__可查看所有子类,包括:
deque:双端队列,支持快速两端操作。
Counter:计数器,统计可哈希对象。
OrderedDict:有序字典,保留插入顺序。
defaultdict:带默认值的字典。
namedtuple:命名元组,增强可读性。
其他如ChainMap、UserDict等(详见官方文档)。
基础功能
统计频率:直接统计列表、字符串或字典中的元素出现次数。
from collections import Counterwords = ['red', 'blue', 'red', 'green']Counter(words) # Counter({'red': 2, 'blue': 1, 'green': 1})支持多种输入:字符串、列表、字典或关键字参数均可初始化。
核心方法
elements():按计数重复生成元素迭代器。
c = Counter(a=2, b=1)list(c.elements()) # ['a', 'a', 'b']most_common(n):返回前n个高频元素及计数。
Counter('abracadabra').most_common(2) # [('a', 5), ('b', 2)]subtract():减去另一个计数器的计数(允许负值)。
c = Counter(a=3); c.subtract(Counter(a=1)); c # Counter({'a': 2})数学操作
支持运算符:如+(合并计数)、-(差集)、&(交集取最小值)、|(并集取最大值)。
c1 = Counter(a=3, b=1); c2 = Counter(a=1, b=2)c1 & c2 # Counter({'a': 1, 'b': 1})应用示例:文本相似度计算通过统计高频词交集与并集的比例计算相似度:
def str_sim(str0, str1, topn): c0 = Counter(str0).most_common(topn) c1 = Counter(str1).most_common(topn) jiao = sum((Counter(dict(c0)) & Counter(dict(c1))).values()) bing = sum((Counter(dict(c0)) | Counter(dict(c1))).values()) return jiao / bing if bing else 0特性
基于双向链表实现,适合频繁的头部/尾部插入删除操作(时间复杂度O(1))。
对比list:list的头部操作是O(n),而deque更高效。
常用方法
append(x) / appendleft(x):右侧/左侧添加元素。
pop() / popleft():右侧/左侧弹出元素。
extend(iterable) / extendleft(iterable):扩展右侧/左侧(注意extendleft会反转顺序)。
rotate(n):循环移动元素(正数向右,负数向左)。
d = deque([1, 2, 3]); d.rotate(1); d # deque([3, 1, 2])应用场景
滑动窗口问题(如最近N条日志)。
广度优先搜索(BFS)中的队列实现。
OrderedDict
保留键的插入顺序,适合需要有序输出的场景。
示例:按插入顺序遍历字典。
od = OrderedDict([('a', 1), ('b', 2)]); od.keys() # odict_keys(['a', 'b'])defaultdict
自动初始化缺失键的默认值,避免KeyError。
示例:统计列表中元素的出现位置。
dd = defaultdict(list)for i, item in enumerate(['a', 'b', 'a']): dd[item].append(i) # defaultdict(<class 'list'>, {'a': [0, 2], 'b': [1]})namedtuple
创建带字段名的元组,提升代码可读性。
示例:定义二维点结构。
Point = namedtuple('Point', ['x', 'y'])p = Point(11, y=22); p.x + p.y # 33初学者可先掌握Counter和defaultdict,快速提升代码效率。
进阶用户可深入deque和OrderedDict,优化特定场景性能。
通过灵活运用这些工具,能够显著提升Python代码的简洁性、可读性和执行效率。