409 字
1 分钟
Python OA / 白板复健 Cheat Sheet
🧠 Python OA / 白板复健 Cheat Sheet
C++ ICPC 竞赛党 → Python 白板手撕恢复
目标:Amazon / Meta / 大厂 OA 无 AI 辅助
🔹 0. 竞赛基础模板
import sysfrom collections import *import heapqimport bisectfrom functools import cmp_to_key
sys.setrecursionlimit(10**7)input = sys.stdin.readline🔹 1. 数据结构映射(C++ → Python)
1️⃣ vector → list
a = []a = [0] * na = list(range(n))二维数组(⚠️ 别写错)
grid = [[0]*n for _ in range(m)]❌ 错误写法:
grid = [[0]*n]*m常用操作:
a.append(x)a.pop()a.pop(i)a.insert(i, x)a.extend(b)
a[i]a[-1]len(a)切片:
a[l:r]a[::-1]2️⃣ queue / deque
from collections import deque
q = deque()q.append(x)q.appendleft(x)
q.pop()q.popleft()BFS 模板:
q = deque([start])
while q: u = q.popleft() for v in g[u]: q.append(v)3️⃣ priority_queue → heapq
默认小根堆:
import heapq
h = []heapq.heappush(h, x)heapq.heappop(h)大根堆:
heapq.heappush(h, -x)x = -heapq.heappop(h)多关键字:
heapq.heappush(h, (dist, node))4️⃣ map / unordered_map
dict
mp = {}mp[key] = valuemp.get(key, 0)
for k, v in mp.items(): ...defaultdict
from collections import defaultdict
cnt = defaultdict(int)g = defaultdict(list)s = defaultdict(set)5️⃣ Counter(统计神器)
from collections import Counter
cnt = Counter(nums)cnt[x]cnt.most_common(k)Anagram:
Counter(s) == Counter(t)6️⃣ set
s = set()s.add(x)s.remove(x)s.discard(x)x in s集合运算:
a | ba & ba - b🔹 2. 排序 & 二分
1️⃣ sort
a.sort()a.sort(reverse=True)b = sorted(a)2️⃣ key 排序(最重要)
单关键字:
a.sort(key=len)a.sort(key=lambda x: x[1])多关键字:
a.sort(key=lambda x: (x[0], -x[1]))3️⃣ cmp_to_key(少用)
from functools import cmp_to_key
def cmp(a,b): return a-b
a.sort(key=cmp_to_key(cmp))4️⃣ bisect(二分)
import bisect
bisect.bisect_left(a, x)bisect.bisect_right(a, x)bisect.insort(a, x)🔹 3. 字符串 & 切片
反转:
s[::-1]判断回文:
s == s[::-1]ASCII:
ord('a')chr(97)ord(c) - ord('a')split / join:
s.split()",".join(arr)遍历技巧:
for i, x in enumerate(a): ...
for x, y in zip(a, b): ...🔹 4. 高频算法模板
滑窗
l = 0for r in range(n): while 条件不满足: l += 1前缀和
pre = [0]*(n+1)
for i in range(n): pre[i+1] = pre[i] + a[i]区间和:
pre[r] - pre[l]双指针
l, r = 0, n-1
while l < r: ...单调栈
stack = []
for x in nums: while stack and stack[-1] > x: stack.pop() stack.append(x)TopK
import heapqheapq.nlargest(k, nums)heapq.nsmallest(k, nums)🔹 5. Python 容易翻车的坑
❶ 二维数组浅拷贝
grid = [[0]*n for _ in range(m)]❷ 递归深度
import syssys.setrecursionlimit(10**7)❸ mutable 默认参数
❌
def dfs(x, path=[]):✅
def dfs(x, path=None): if path is None: path = []🔹 6. Amazon 高频工具
出现概率极高:
defaultdictCounterheapqdequesort(key=lambda)bisect- sliding window
- prefix sum
🔹 7. 自测清单(白板标准)
我是否可以在 5 秒内写出:
defaultdict(list)Counter(nums)heapq.heappusha.sort(key=lambda x:(x[0],-x[1]))bisect_lefts[::-1]enumeratezipprefix sum- 滑窗模板
如果不能,重复抄 5 次。
🔥 最终目标
让 Python 成为你的第二 C++
当你达到:
- 不再思考语法
- 不再查 API
- 排序 key 能秒写
- heap / defaultdict 条件反射
你就回到 ICPC 状态了。
如果你愿意,我可以给你下一份:
《Amazon OA 20 个 Python 手撕母板(白板可背版)》
那份会是实战模板合集。
分享
如果这篇文章对你有帮助,欢迎分享给更多人!
Python OA / 白板复健 Cheat Sheet
https://blog.treesonsnow.com/posts/python-oa-cheat-sheet/ 部分信息可能已经过时
相关文章 智能推荐