什么是collections模块?哎,平时写Python,你肯定离不开list、dict、tuple这些内置容器,可你知不知道,标准库里还藏着个“容器大合集”——collections?它就像给Python原生容器打了B级强化补丁,提供了一堆专门解决常见场景痛点的高级数据结构,让你的代码既简洁又高效。
它到底解决了哪些痛点?
- • 统计单词频次,每次都写
if k in d:… else:…? - • 嵌套作用域参数上下文管理搞得你头大?统一交给
collections!
主要容器一览(文字+表格)下面这张“小抄”帮你记住7大模块:
| | |
deque | | 实现队列、栈、滑动窗口、tail/stream处理 |
Counter | | |
defaultdict | | |
OrderedDict | | |
ChainMap | | |
namedtuple | | |
UserDict/List/String | | |
代码实例时间
- 1. deque做一个
tail函数,零代码就能读文件末尾10行:
from collections import dequedeftail(filename, n=10):withopen(filename, encoding='utf-8')as f:return deque(f, n)# 只保留最后n行print(tail('app.log',5))
from collections importCounterwords ="hello world hello python".split()cnt =Counter(words)print(cnt.most_common(2))# [('hello', 2), ('world',1)]
from collections import defaultdictpairs =[('a',1),('b',2),('a',3)]d = defaultdict(list)for k,v in pairs: d[k].append(v)print(d)# {'a': [1,3], 'b': [2]}
import osfrom collections importChainMapdefaults ={'color':'red','user':'guest'}cli ={'user':'alice'}env =dict(os.environ)config =ChainMap(cli, env, defaults)print(config['color'], config['user'])
from collections import namedtuplePoint= namedtuple('Point','x y')p =Point(3,4)print(f"x={p.x}, y={p.y}, dist={ (p.x**2+p.y**2)**0.5 }")
优缺点简评
总结说白了,collections就像给你内置容器加了一套“外挂”——专治各种常见痛点。写过几次滑动窗口你就会爱上deque,做过N次字符统计你离不开Counter,要是还手写各种if k in dict,赶紧用defaultdict省心省力。总之,建议:
- • 项目中有合适场景,优先考虑collections里的“神器”。
- • 不要盲目堆,用之前多问一句:“是不是默认值/双端队列/有序字典能解决?”
动动手,试试上面的小示例,把collections装进你的工具箱,Python开发立刻更高级!