Python3 数据结构知识点汇总
编程小白也能看懂的数据结构详解
数据结构是编程中组织和存储数据的方式,Python提供了几种内置的数据结构,每种都有不同的特点和用途。本指南将用简单易懂的语言介绍Python中最常用的数据结构。
列表
(List)
(List)
元组
(Tuple)
(Tuple)
字典
(Dict)
(Dict)
集合
(Set)
(Set)
1. 列表 (List)
什么是列表?
列表就像是一个可以装很多东西的”购物袋”,你可以往里面放任何类型的东西(数字、文本、甚至其他列表),而且袋子里的东西可以随时增加、减少或修改。
特点:
- 可变:创建后可以修改(增删改)
- 有序:元素有固定顺序(按添加顺序排列)
- 可重复:允许包含相同的元素
- 索引访问:通过位置(索引)获取元素,从0开始
常用操作:
my_list = [1, 2, 3]– 创建列表my_list.append(4)– 在末尾添加元素my_list.insert(1, "a")– 在指定位置插入元素my_list.remove(2)– 删除指定元素my_list[0] = 100– 修改元素len(my_list)– 获取列表长度
使用场景:
- 需要存储多个相关项(如学生姓名列表)
- 需要经常修改数据集合
- 需要保持元素的添加顺序
代码示例:
# 创建列表
fruits = ["苹果", "香蕉", "橙子"]
# 添加元素
fruits.append("葡萄") # 现在为 ["苹果", "香蕉", "橙子", "葡萄"]
# 访问元素
print(fruits[0]) # 输出: 苹果
# 修改元素
fruits[1] = "芒果" # 现在为 ["苹果", "芒果", "橙子", "葡萄"]
# 删除元素
fruits.remove("橙子") # 现在为 ["苹果", "芒果", "葡萄"]
# 遍历列表
for fruit in fruits:
print(fruit)
2. 元组 (Tuple)
什么是元组?
元组就像是一个”密封的盒子”,一旦创建就不能修改。它用于存储一组不可变的数据,类似于列表但更安全。
特点:
- 不可变:创建后不能修改(不能增删改)
- 有序:元素有固定顺序
- 可重复:允许包含相同的元素
- 访问快:比列表访问速度更快
常用操作:
my_tuple = (1, 2, 3)– 创建元组my_tuple[0]– 访问元素len(my_tuple)– 获取元组长度tuple1 + tuple2– 连接元组my_tuple.count(2)– 计算元素出现次数
使用场景:
- 存储不应更改的数据(如日期、坐标)
- 作为字典的键(因为不可变)
- 函数返回多个值时
代码示例:
# 创建元组
point = (10, 20)
# 访问元素
x = point[0] # x = 10
y = point[1] # y = 20
# 元组解包
width, height = (800, 600)
# 作为字典的键
locations = {(35.68, 139.76): "东京", (40.71, -74.00): "纽约"}
# 尝试修改元组会出错
# point[0] = 15 # 报错: 'tuple' object does not support item assignment
3. 字典 (Dict)
什么是字典?
字典就像一本”电话簿”,通过名字(键)查找电话号码(值)。每个键对应一个值,键必须是唯一的。
特点:
- 键值对:存储键和对应的值
- 可变:可以添加、修改、删除键值对
- 无序:Python 3.7+ 后保持插入顺序
- 键唯一:不允许重复键
- 快速查找:通过键快速访问值
常用操作:
my_dict = {"name": "Alice", "age": 30}– 创建字典my_dict["name"]– 通过键获取值my_dict["age"] = 31– 修改值my_dict["city"] = "北京"– 添加新键值对del my_dict["age"]– 删除键值对"name" in my_dict– 检查键是否存在
使用场景:
- 存储具有关联关系的数据(如用户信息)
- 需要快速查找数据的场景
- 数据分类和分组
代码示例:
# 创建学生字典
student = {
"name": "张三",
"age": 20,
"courses": ["数学", "英语", "编程"]
}
# 访问数据
print(student["name"]) # 输出: 张三
# 添加新数据
student["gender"] = "男"
# 修改数据
student["age"] = 21
# 删除数据
del student["courses"]
# 遍历字典
for key, value in student.items():
print(f"{key}: {value}")
# 安全访问
phone = student.get("phone", "未知") # 如果phone不存在返回"未知"
4. 集合 (Set)
什么是集合?
集合就像是一个”不重复的袋子”,里面装着一堆不重复的元素,没有顺序。主要用于去重和数学运算(交集、并集等)。
特点:
- 无序:元素没有固定顺序
- 元素唯一:不允许重复元素
- 可变:可以添加或删除元素(frozenset不可变)
- 数学运算:支持交集、并集、差集等操作
常用操作:
my_set = {1, 2, 3}– 创建集合my_set.add(4)– 添加元素my_set.remove(2)– 删除元素len(my_set)– 获取元素数量set1 | set2– 并集(两个集合所有元素)set1 & set2– 交集(两个集合共有元素)
使用场景:
- 去除列表中的重复元素
- 检查元素是否存在(比列表快)
- 数学集合运算
代码示例:
# 创建集合
fruits = {"苹果", "香蕉", "橙子", "苹果"} # 重复的"苹果"会被自动去除
# 添加元素
fruits.add("葡萄")
# 删除元素
fruits.remove("香蕉")
# 检查存在
if "苹果" in fruits:
print("有苹果")
# 集合运算
setA = {1, 2, 3, 4}
setB = {3, 4, 5, 6}
print(setA | setB) # 并集: {1, 2, 3, 4, 5, 6}
print(setA & setB) # 交集: {3, 4}
print(setA - setB) # 差集: {1, 2}
# 列表去重
numbers = [1, 2, 2, 3, 4, 4, 5]
unique = set(numbers) # {1, 2, 3, 4, 5}
5. 数据结构对比
| 特性 | 列表(List) | 元组(Tuple) | 字典(Dict) | 集合(Set) |
|---|---|---|---|---|
| 可变性 | 可变 | 不可变 | 可变 | 可变 |
| 顺序 | 有序 | 有序 | Python 3.7+有序 | 无序 |
| 重复元素 | 允许 | 允许 | 键不允许重复 | 不允许 |
| 索引方式 | 数字索引 | 数字索引 | 键索引 | 不支持索引 |
| 访问速度 | 中等 | 快 | 非常快 | 非常快 |
| 典型用途 | 存储可变序列 | 存储不可变数据 | 键值对关联数据 | 去重和集合运算 |
6. 总结
Python提供了多种数据结构,每种都有其特定的优势和适用场景:
- 需要修改数据? → 使用列表
- 数据不应被更改? → 使用元组
- 需要键值关联? → 使用字典
- 需要去重或集合运算? → 使用集合
理解每种数据结构的特点和适用场景,是编写高效Python代码的关键。随着编程经验的积累,你会更自然地知道在何时使用何种数据结构。