数据结构
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 # TypeError3. 字典 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]适用于所有序列
下一章 模块与包:如何组织更大规模的代码。