跳到主要内容

内置数据结构

选择合适的数据结构能让代码更高效。理解常见操作的时间复杂度,是写出高性能 Python 的第一步。

list / tuple / dict / set 特性对比

容器有序可变元素可重复典型操作复杂度
list索引 O(1),尾部增删 O(1),中间插入 O(n)
tuple索引 O(1),可哈希
dict是(3.7+)键不重复增删改查平均 O(1)
set增删查平均 O(1)

collections 模块

标准库 collections 提供了更专用的容器。

  • deque:双向队列,两端 append/popleft 均为 O(1),适合队列与滑动窗口
  • Counter:可哈希对象计数,most_common(n) 快速取 Top-N
  • defaultdict:访问缺失键时自动创建默认值,避免 KeyError
  • OrderedDict:3.7+ 后 dict 已保序,基本被普通 dict 取代
from collections import Counter, defaultdict

cnt = Counter("abracadabra")
cnt.most_common(2) # [('a', 5), ('b', 2)]

graph = defaultdict(list)
graph["A"].append("B")

何时选哪个

  • 需要按键快速查找:用 dict
  • 需要去重或成员测试:用 set
  • 频繁在头部插入/删除:用 deque 而非 list
  • 维护插入顺序且只追加:用 list
  • 数据不可变且需作字典键:用 tuple