大家好,我是木木。
今天给大家分享一个专注的 Python 库,python-ds。
python-ds
它收录了常见数据结构与算法面试题的纯 Python 实现,涵盖数组、链表、栈、二叉树、图、动态规划、贪心、字符串等分类,每道题风格统一、代码简洁。
项目地址:https://github.com/prabhupant/python-ds
官方文档:https://github.com/prabhupant/python-ds/blob/master/README.md
三个特点
面向面试
题目直接对标 LeetCode / Cracking the Coding Interview 等常见面试来源,不做花哨包装,就是给你干净可用的解法。
风格统一
所有题目遵循同一套代码范式:函数定义 + 测试用例,读一道就能快速上手其余题目,不用反复适应不同作者的风格。
分类清晰
按数据结构(数组、链表、栈、树、图、字符串)和算法(动态规划、排序、贪心、位运算、数学)分目录组织,找题很快。
最佳实践
直接克隆仓库,按目录浏览即可。
gitclonehttps://github.com/prabhupant/python-ds.git
链表反转
这段代码解决什么问题:用迭代法反转单链表,输出反转前后各节点的值,验证反转正确性。
classNode():def__init__(self,val):self.val=valself.next=Nonedefreverse(head):prev=Nonecurr=headwhilecurr:nxt=curr.nextcurr.next=prevprev=currcurr=nxtreturnprevhead=Node(1)head.next=Node(2)head.next.next=Node(3)curr=headwhilecurr:print(curr.val)curr=curr.nextnew_head=reverse(head)curr=new_headwhilecurr:print(curr.val)curr=curr.next
反转前输出 1→2→3,反转后输出 3→2→1。三指针法(prev、curr、next)是链表反转的标准做法,时间 O(n),空间 O(1)。面试高频题。
并查集 Union-Find
这段代码解决什么问题:演示并查集的初始化、合并和连通查询,判断节点之间是否连通。
fromdata_structures.union_find.ufimportUnion_finduf=Union_find(6)uf.union(1,2)print('2 and 3 connected?',uf.find(2,3))uf.union(1,3)uf.union(4,5)print('2 and 4 connected?',uf.find(2,4))uf.union(3,5)print('2 and 4 connected?',uf.find(2,4))
初始 1-2-3 和 4-5 是两个独立集合。合并 3-5 后,集合连通,2 和 4 变为 connected。Union-Find 是处理连通性问题的经典数据结构,带路径压缩和按秩合并后接近 O(α(n))。
高级功能
有效括号验证
这段代码解决什么问题:用栈判断一个字符串中的括号是否匹配闭合,覆盖圆括号、方括号和花括号三种类型。
defcheck(s):stack=[]forelementins:ifelement=='(':stack.append(')')elifelement=='[':stack.append(']')elifelement=='{':stack.append('}')elifnotstackorstack.pop()!=element:returnFalsereturnnotstacktests=['()[]{}','(]','([{}])','{[()]}','((()))']fortintests:print(f'{t:12} -> {check(t)}')
用栈做括号匹配是经典题:遇到左括号压入对应右括号,遇到右括号弹出比对。(] 返回 False 因为栈顶 ) 和 ] 不匹配。复杂度 O(n)。
适用 / 不适用场景
适用:
不适用:
上线前检查清单
- 代码仅供学习参考,生产使用前需补充边界测试和异常处理。
总结
python-ds 是一个专注面试的数据结构与算法题库,代码干净、分类清晰,适合系统刷题和教学参考。如果你正在准备技术面试,它值得收藏。