数据结构就是装数据的容器

写程序本质上是处理数据。数据多了,就需要合适的"容器"来装:就像衣柜有抽屉、书架有格子、书包有夹层,Python 也提供了多种数据结构,每种都有自己的脾气。

选对容器,代码又快又清楚;选错容器,代码又慢又绕。这篇文章用生活化的例子,把 Python 里最常用的六种数据结构一次讲明白。

数据结构是算法的地基,容器选对了,问题就解决了一半。
本文核心知识点
  • 列表有序、可增删。
  • 元组有序、不可变。
  • 字典键值对、按名查找。
  • 栈/队列两种进出规则。
Python 数据结构配图:蓝色渐变背景上一组彩色积木堆成阶梯柱状,积木左侧有齿轮链条装饰,右侧一把蓝色放大镜对准积木区域
不同结构就像不同形状的积木塔,各有各的搭建方式。

列表:一条能增删的队列

列表用方括号,是最常用的容器。它像一条排队的人:有顺序,随时可以加人、删人、改人、按位置找人。

scores = [85, 92, 78]
scores.append(95)          # 末尾加人
scores.insert(0, 60)       # 插到最前面
scores[1] = 88             # 改第二个位置
del scores[0]              # 删除第一个
print(scores)              # [92, 78, 95]

列表适合:数据有顺序、需要频繁增删改查的场景,比如学生成绩、待办事项。

元组:不可变的安全名单

元组用圆括号,一旦创建就不能修改。它像一份打印好的名单:内容固定,防止程序不小心改掉重要数据。

colors = ("red", "green", "blue")
# colors[0] = "yellow"  # 会报错,元组不可变
print(colors[1])          # green

元组适合:常量配置、函数返回多个值时打包,比如坐标点、日期(年、月、日)。

字典:用名字找东西

字典用花括号,存的是"键值对"。它像通讯录:知道名字(键),就能立刻找到电话(值),不用从头翻。

stu = {"name": "小明", "age": 12, "city": "广州"}
print(stu["name"])          # 小明
stu["score"] = 98           # 新增键
print("age" in stu)         # True,判断键是否存在

字典适合:需要按键快速查找的场景,比如统计单词出现次数、配置参数、对象属性。

集合:去重与快速判断

集合也是花括号,但只存不重复的元素,而且查找极快。它像一个储物间,放进去的东西自动去掉重复。

words = {"apple", "banana", "apple"}
print(words)                 # {'apple', 'banana'}
print("pear" in words)       # False

集合适合:去重、判断"是否存在"、求交集并集差集,比如检查一个账号是否在黑名单。