CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
Python 进阶/课时/算法与数据结构
RawBlame
课时目录12 节

Python 进阶

  1. 01Python 进阶地图
  2. 02类型与数据结构
  3. 03OOP 深入
  4. 04函数式特性
  5. 05并发与异步
  6. 06Web 框架
  7. 07包管理与虚拟环境
  8. 08静态类型与校验
  9. 09测试框架
  10. 10代码质量工具
  11. 11算法与数据结构
  12. 12综合练习

算法与数据结构

data-structures-algorithms、hashmaps、recursion、sorting。

30 分钟

数据结构与算法

面试与工程优化都依赖复杂度意识与标准结构的熟练实现。Python 内置 list/dict 已很强,本课补 deque、heapq、bisect 与常见模式。语言基础 python-fundamentals;Agent 检索/RAG 涉及向量与排序,见 ai-agents-essentials;/roadmaps/python。

学习目标

  • 分析时间/空间复杂度(Big-O 直觉)
  • 熟练使用 collections.deque、heapq、bisect
  • 实现 BFS/DFS 与二分查找模板

复杂度速查

操作listdictdeque
末尾 appendO(1)*—O(1)
头部 popO(n)—O(1)
按键查找—O(1) avg—

* 均摊

deque 与 BFS

from collections import deque

def bfs(graph: dict[str, list[str]], start: str) -> list[str]:
    visited: set[str] = set()
    order: list[str] = []
    queue: deque[str] = deque([start])
    while queue:
        node = queue.popleft()
        if node in visited:
            continue
        visited.add(node)
        order.append(node)
        queue.extend(graph.get(node, []))
    return order

graph = {"a": ["b", "c"], "b": ["d"], "c": [], "d": []}
print(bfs(graph, "a"))  # ['a', 'b', 'c', 'd']

heapq Top-K

import heapq

def top_k_lessons(scores: dict[str, int], k: int) -> list[tuple[int, str]]:
    # 最小堆维护 K 个最大分数
    heap: list[tuple[int, str]] = []
    for slug, score in scores.items():
        heapq.heappush(heap, (score, slug))
        if len(heap) > k:
            heapq.heappop(heap)
    return sorted(heap, reverse=True)

scores = {"pya-intro": 90, "pya-async": 95, "pya-dsa": 88}
print(top_k_lessons(scores, 2))

二分查找

import bisect

sorted_slugs = ["pya-async", "pya-dsa", "pya-intro", "pya-web"]
idx = bisect.bisect_left(sorted_slugs, "pya-intro")
print(idx)  # 2

LeetCode / 剑指 Offer 可用 Python 练手;注意 Python 递归深度限制(DFS 深图改迭代或 sys.setrecursionlimit 谨慎使用)。

练习

  • 用 DFS 递归实现图的遍历,与 BFS 结果对比
  • 用 heapq 合并两个已排序的 slug 列表
  • 分析 list.pop(0) 为何在大队列场景应换 deque
  • 小结

    选对结构比微调循环更重要。 最后一课 practice 综合运用 packaging、web、async 与测试。

    加载本节练习…
    ← 上一课代码质量工具下一课 →综合练习