一、引言:为什么数据结构如此重要?
在编程中,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。选择合适的数据结构可以:
- 提高程序效率:更快地存取数据
- 简化代码逻辑:更清晰地表达算法
- 增强代码可维护性:易于修改和扩展
Python 提供了丰富的内置数据结构,同时支持自定义复杂的数据结构。
二、核心数据结构概览
类别 |
数据结构 |
特点 |
序列类型 |
列表(List),元组(Tuple),字符串(String),范围(Range) |
有序的元素集合 |
映射类型 |
字典(Dictionary) |
键值对存储 |
集合类型 |
集合(Set),冻结集合(Frozen Set) |
无序唯一元素 |
💡 本文将重点讲解最常用的数据结构及其操作。
三、列表(List)
1. 定义与基本特性
列表是有序、可变的元素集合,可以存储不同类型的数据。
fruits = ["苹果", "香蕉", "橙子"]
numbers = [1, 2, 3]
mixed = ["Alice", 25, True]
2. 常用操作
2.1 索引与切片
print(fruits[0]) # "苹果"
print(fruits[-1]) # "橙子" (从末尾开始计数)
print(fruits[1:3]) # ["香蕉", "橙子"] (切片 [start:end))
2.2 修改元素
fruits[1] = "葡萄"
print(fruits) # ["苹果", "葡萄", "橙子"]
2.3 添加与删除元素
# 添加
fruits.append("草莓") # 在末尾添加
fruits.insert(1, "芒果") # 在索引1处插入
# 删除
fruits.remove("苹果") # 移除第一个匹配项
del fruits[0] # 根据索引删除
popped = fruits.pop() # 弹出并返回最后一个元素
2.4 排序与反转
numbers.sort() # 升序排序
numbers.reverse() # 反转顺序
sorted_numbers = sorted(numbers, reverse=True) # 返回降序排序的新列表
2.5 列表推导式
一种简洁创建列表的方式。
squares = [x**2 for x in range(1, 6)] # [1, 4, 9, 16, 25]
四、元组(Tuple)
1. 定义与基本特性
元组与列表类似,但不可变,适合用于不希望被修改的数据。
point = (10, 20)
person = ("Alice", 25, "北京")
2. 常用操作
2.1 访问元素
print(point[0]) # 10
print(person[1]) # 25
2.2 解包
name, age, city = person
print(name, age, city) # Alice 25 北京
✅ 元组解包是一种优雅获取多个返回值的方式。
五、字典(Dictionary)
1. 定义与基本特性
字典是键值对的集合,键必须是唯一的且不可变(如字符串、数字、元组),值则可以是任意类型。
student = {
"name": "Bob",
"age": 20,
"courses": ["数学", "英语"]
}
2. 常用操作
2.1 访问与修改
print(student["name"]) # Bob
student["age"] = 21 # 修改
student["city"] = "上海" # 新增
2.2 检查键是否存在
if "name" in student:
print("包含 'name' 键")
# 或者使用 get 方法安全访问
print(student.get("phone", "未知")) # 如果没有 'phone' 键,则返回默认值 "未知"
2.3 删除键值对
del student["courses"] # 删除指定键
popped_value = student.pop("age") # 弹出并返回值
2.4 获取所有键、值、键值对
print(student.keys()) # dict_keys(['name', 'age'])
print(student.values()) # dict_values(['Bob', 20])
print(student.items()) # dict_items([('name', 'Bob'), ('age', 20)])
六、集合(Set)
1. 定义与基本特性
集合是无序、唯一元素的集合,常用于去重和成员测试。
unique_numbers = {1, 2, 3, 3, 4} # {1, 2, 3, 4}
2. 常用操作
2.1 成员测试
print(2 in unique_numbers) # True
2.2 并集、交集、差集
set1 = {1, 2, 3}
set2 = {3, 4, 5}
union_set = set1 | set2 # {1, 2, 3, 4, 5}
intersection_set = set1 & set2 # {3}
difference_set = set1 - set2 # {1, 2}
symmetric_difference_set = set1 ^ set2 # {1, 2, 4, 5}
七、总结:数据结构的核心要点
数据结构 |
特性 |
使用场景 |
列表 |
有序、可变 |
动态数组,适用于需要频繁修改的场景 |
元组 |
有序、不可变 |
不需要修改的数据,适用于固定集合 |
字典 |
键值对 |
快速查找、映射关系 |
集合 |
无序、唯一 |
去重、成员测试 |
学习建议:
- 多实践:通过实际编写代码加深理解。
- 结合应用场景:思考每种数据结构最适合解决的问题类型。
- 深入学习高级应用:如列表推导式、字典推导式等高效编程技巧。
📌 动手练习:
- 创建一个字典,存储学生的姓名、年龄、课程,然后打印出所有课程名称。
- 编写一个函数,接收一个列表作为参数,返回一个新的仅包含偶数的列表。
- 使用集合去除重复的用户名单。
# 示例练习:筛选偶数
def filter_even(numbers):
return [num for num in numbers if num % 2 == 0]
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter_even(numbers)
print(even_numbers) # 输出:[2, 4, 6]