Learn
Python/05-data-structures

数据结构

Python 内置四种核心容器:list、tuple、dict、set。理解它们的差异是写出高效代码的关键。

1. 列表 list

有序、可变、允许重复。

nums = [1, 2, 3, 4, 5]
nums.append(6)        # 末尾追加
nums.insert(0, 0)     # 指定位置插入
nums.pop()            # 弹出末尾
nums.remove(3)        # 移除第一个匹配
nums.sort()           # 原地排序
nums.reverse()        # 原地反转
len(nums)             # 长度
nums[1:4]             # 切片(左闭右开)
列表常用操作
fruits = ["苹果", "香蕉", "橙子", "苹果"]
fruits.append("葡萄")
print(fruits)
print(len(fruits), fruits.count("苹果"))
print(fruits[1:3])   # 切片

2. 元组 tuple

不可变的列表。常用于函数返回多值、字典 key。

元组
point = (3, 4)
x, y = point                  # 解包
print(f"({x}, {y})")
print(point[0], point[-1])    # 索引
 
# 元组是不可变的
# point[0] = 10  # TypeError

3. 字典 dict

键值对集合。键必须是不可变类型(str/int/tuple)。

字典
user = {"name": "Alice", "age": 30, "city": "北京"}
print(user["name"])
user["email"] = "a@b.com"     # 新增
user["age"] = 31              # 修改
print(user.get("phone", "无")) # 安全访问
 
for k, v in user.items():
    print(f"{k}: {v}")

4. 集合 set

无序、不重复。适合去重与集合运算。

集合
s = {1, 2, 3, 2, 1}
print(s)                       # {1, 2, 3}
 
a = {1, 2, 3}
b = {3, 4, 5}
print(a & b)                   # 交集 {3}
print(a | b)                   # 并集 {1,2,3,4,5}
print(a - b)                   # 差集 {1,2}
print(a ^ b)                   # 对称差 {1,2,4,5}

5. 推导式(Comprehension)

Python 最优雅的特性之一:用一行表达式生成新容器。

列表/字典/集合推导式
# 列表推导式:1~10 的平方
squares = [x * x for x in range(1, 11)]
print(squares)
 
# 字典推导式:数字 -> 它的平方
d = {x: x * x for x in range(1, 6)}
print(d)
 
# 集合推导式
evens = {x for x in range(10) if x % 2 == 0}
print(evens)
 
# 带条件的列表推导式
big = [x for x in range(20) if x > 10]
print(big)

6. 实战:词频统计

词频统计
text = "the quick brown fox jumps over the lazy dog the"
words = text.split()
freq = {}
for w in words:
    freq[w] = freq.get(w, 0) + 1
 
# 按词频倒序
top = sorted(freq.items(), key=lambda kv: -kv[1])
for w, c in top:
    print(f"{w}: {c}")

🎯 练习

列表去重并保序
# 任务:给定列表 nums = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
# 输出去重后保持原顺序的结果: [3, 1, 4, 5, 9, 2, 6]
 
nums = [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5]
# 补全代码(提示:可以用 set 记录已出现的元素)

小结

  • ✅ list:有序可变,O(1) 追加/末尾弹出
  • ✅ tuple:有序不可变,可作 dict key
  • ✅ dict:键值对,O(1) 查找(哈希表实现)
  • ✅ set:无序不重复,集合运算 & | - ^
  • ✅ 推导式让容器构建更简洁
  • ✅ 切片 seq[start:stop:step] 适用于所有序列

下一章 模块与包:如何组织更大规模的代码。