核心数据结构
Python 提供了四个内置的高级数据结构:列表 (List)、元组 (Tuple)、字典 (Dictionary) 和 集合 (Set)。掌握它们是 Python 编程的关键。
1. 列表 (List)
列表是有序、可变、允许重复元素的集合。
创建与访问
# 创建列表
fruits = ["apple", "banana", "cherry"]
mixed = [1, "hello", 3.14, True] # 可以包含不同类型
# 访问元素 (索引从 0 开始)
print(fruits[0]) # "apple"
print(fruits[-1]) # "cherry" (最后一个元素)
修改与操作 (CRUD)
# 修改
fruits[1] = "blueberry"
# 添加
fruits.append("date") # 在末尾添加
fruits.insert(1, "apricot") # 在指定位置插入
# 删除
fruits.remove("apple") # 删除指定值
popped = fruits.pop() # 删除并返回最后一个元素
del fruits[0] # 删除指定索引
# 查找
if "banana" in fruits:
print("Found!")
列表切片 (Slicing)
语法:list[start:end:step] (左闭右开 [start, end))
nums = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(nums[2:5]) # [2, 3, 4]
print(nums[:3]) # [0, 1, 2] (从头开始)
print(nums[7:]) # [7, 8, 9] (直到结尾)
print(nums[::-1]) # [9, 8, ..., 0] (反转列表)
print(nums[::2]) # [0, 2, 4, 6, 8] (步长为2)
常用方法
| 方法 | 描述 |
|---|---|
.append(x) |
末尾追加 |
.extend(iterable) |
扩展列表 |
.sort() |
原地排序 |
.reverse() |
原地反转 |
len(list) |
获取长度 |
2. 元组 (Tuple)
元组是有序、不可变 (Immutable) 的集合。
特点与用途
- 不可变: 一旦创建,不能修改、添加或删除元素。
- 速度快: 比列表轻量,访问速度略快。
- 安全: 保护数据不被意外修改。
- 用途: 函数返回多值、字典的键。
# 创建元组
point = (10, 20)
single_item = (1,) # 注意:单个元素需要加逗号
# 访问 (同列表)
x = point[0]
# 解包 (Unpacking)
x, y = point
print(f"x={x}, y={y}")
不可变性
尝试修改元组会报错:TypeError: 'tuple' object does not support item assignment
3. 字典 (Dictionary)
字典是无序的、键值对 (Key-Value) 的集合。键必须是唯一的且不可变 (通常是字符串或数字)。
创建与访问
# 创建字典
person = {
"name": "Alice",
"age": 25,
"city": "New York"
}
# 访问值
print(person["name"]) # "Alice"
# 使用 .get() 安全访问 (推荐)
print(person.get("email")) # None (键不存在时不报错)
print(person.get("email", "N/A")) # "N/A" (指定默认值)
修改操作
# 添加/修改
person["email"] = "alice@example.com" # 新增
person["age"] = 26 # 修改
# 删除
del person["city"]
age = person.pop("age")
遍历字典
# 遍历键
for key in person:
print(key)
# 遍历值
for value in person.values():
print(value)
# 遍历键值对
for key, value in person.items():
print(f"{key}: {value}")
4. 集合 (Set)
集合是无序、不重复元素的集合。主要用于去重和数学运算。
# 创建集合
colors = {"red", "green", "blue", "red"}
print(colors) # {'red', 'green', 'blue'} (自动去重)
empty_set = set() # 注意:{} 创建的是空字典,不是空集合
集合运算
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
# 交集
print(a & b) # {3, 4}
# 并集
print(a | b) # {1, 2, 3, 4, 5, 6}
# 差集 (a 有 b 没有)
print(a - b) # {1, 2}
# 对称差集 (不同时存在的)
print(a ^ b) # {1, 2, 5, 6}
数据结构对比总结
| 特性 | 列表 (List) | 元组 (Tuple) | 字典 (Dict) | 集合 (Set) |
|---|---|---|---|---|
| 定义符号 | [] |
() |
{key: val} |
{} |
| 有序性 | 有序 | 有序 | 3.7+ 有序 | 无序 |
| 可变性 | 可变 | 不可变 | 可变 | 可变 |
| 重复元素 | 允许 | 允许 | 键不可重复 | 不可重复 |
| 访问方式 | 索引 | 索引 | 键 (Key) | 无 (仅遍历/检查) |
可变 vs 不可变 (Important)
- 不可变:
int,float,str,tuple,bool - 可变:
list,dict,set
# 列表引用的坑
a = [1, 2]
b = a # b 引用了 a 的对象
b.append(3)
print(a) # [1, 2, 3] (a 也变了!)
# 解决方案:复制列表
c = a[:] # 浅拷贝
# 或 import copy; d = copy.deepcopy(a) # 深拷贝
本章小结
- 列表是主力工具,灵活多变。
- 元组用于这种"配置型"不可变数据。
- 字典用于查找和结构化数据 (JSON)。
- 集合用于去重和集合运算。
练习题
- 列表去重:给定列表
[1, 2, 2, 3, 4, 4, 5],使用最简短的代码将其去重并转换回列表。 - 字典统计:给定字符串
"hello world", 统计每个字符出现的次数,存入字典 (如{'h': 1, 'e': 1, ...})。 - 数据管理:创建一个列表,里面包含三个字典,每个字典代表一个学生(包含 name, score)。编写代码找出分数最高的学生姓名。
下一章:运算符与表达式