醋醋百科网

Good Luck To You!

Python进阶教程 第 1 章:Python高级数据结构

点击头像,进入个人中心,查看文章合集,还有更多Python相关的精彩教程等着你!

1.1 引言

Python 的基础数据类型(int、float、str、list、dict、tuple、set)我们都很熟悉了。
在进阶学习中,我们需要更高效、更灵活的数据结构来解决实际问题,比如:

  • 需要 队列(先进先出)时,list 并不是最优解。
  • 需要 统计元素频率 时,手写循环太繁琐。
  • 需要 有序字典 时,内置 dict 在 Python 3.7+ 虽然保持插入顺序,但有更专业的实现。

Python 的 collections 模块提供了许多强大的数据结构,能让我们的代码更简洁高效。


1.2 collections 模块常用数据结构

1.2.1 deque —— 高效双端队列

适合实现队列和栈。
相比 list,deque 在头尾的插入/删除操作时间复杂度是 O(1),而 list 可能是 O(n)

示例:

from collections import deque

# 初始化队列
queue = deque(["A", "B", "C"])

# 右边入队
queue.append("D")
print("入队D:", queue)

# 左边入队
queue.appendleft("Z")
print("左侧入队Z:", queue)

# 右边出队
right_out = queue.pop()
print("右侧出队:", right_out, queue)

# 左边出队
left_out = queue.popleft()
print("左侧出队:", left_out, queue)

输出结果:

入队D: deque(['A', 'B', 'C', 'D'])
左侧入队Z: deque(['Z', 'A', 'B', 'C', 'D'])
右侧出队: D deque(['Z', 'A', 'B', 'C'])
左侧出队: Z deque(['A', 'B', 'C'])

1.2.2 Counter —— 计数器

用于统计可迭代对象中元素出现的次数。

示例:

from collections import Counter

words = ["apple", "banana", "apple", "orange", "banana", "apple"]
counter = Counter(words)

print("统计结果:", counter)
print("apple 出现次数:", counter["apple"])
print("出现最多的两个:", counter.most_common(2))

输出结果:

统计结果: Counter({'apple': 3, 'banana': 2, 'orange': 1})
apple 出现次数: 3
出现最多的两个: [('apple', 3), ('banana', 2)]

1.2.3 defaultdict —— 带默认值的字典

避免 KeyError,可以为不存在的键提供默认值。

示例:

from collections import defaultdict

# 默认值为0
d = defaultdict(int)
d["a"] += 1
d["b"] += 2

print("字典内容:", dict(d))
print("访问未定义key:", d["c"])  # 自动生成默认值 0

输出结果:

字典内容: {'a': 1, 'b': 2}
访问未定义key: 0

1.2.4 OrderedDict —— 有序字典

在 Python 3.7+ 普通字典也保持插入顺序,但 OrderedDict 还提供了 移动元素位置 的方法。

示例:

from collections import OrderedDict

od = OrderedDict()
od["a"] = 1
od["b"] = 2
od["c"] = 3

print("初始字典:", od)

# 移动元素到末尾
od.move_to_end("a")
print("a 移到末尾:", od)

# 移动元素到开头
od.move_to_end("c", last=False)
print("c 移到开头:", od)

输出结果:

初始字典: OrderedDict([('a', 1), ('b', 2), ('c', 3)])
a 移到末尾: OrderedDict([('b', 2), ('c', 3), ('a', 1)])
c 移到开头: OrderedDict([('c', 3), ('b', 2), ('a', 1)])

1.3 图解:常用数据结构

下面是一个示意图,展示了这些数据结构的特点:



1.4 小结

  • deque → 高效双端队列,适合队列和栈
  • Counter → 统计频率最方便
  • defaultdict → 避免 KeyError,自动生成默认值
  • OrderedDict → 有序字典,可手动调整顺序

这些工具能让你的代码更简洁,处理数据更高效。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言