Python 提供了多种内置的数据结构,非常灵活易用,适合处理不同类型的数据需求。以下是常见的数据结构及其用法:
1. 列表(List)
特点
- 有序
- 可变
- 支持重复元素
常用操作
# 定义列表
fruits = ["苹果", "香蕉", "橙子"]
# 访问元素
print(fruits[0]) # 输出: 苹果
print(fruits[-1]) # 输出: 橙子
# 添加元素
fruits.append("梨") # 在末尾添加
fruits.insert(1, "草莓") # 指定位置插入
# 删除元素
fruits.remove("香蕉") # 删除指定元素
fruits.pop() # 删除末尾元素
fruits.pop(0) # 删除指定位置元素
# 其他操作
print(len(fruits)) # 获取长度
fruits.sort() # 排序
fruits.reverse() # 倒序
2. 元组(Tuple)
特点
- 有序
- 不可变
- 适合存储固定数据
常用操作
# 定义元组
colors = ("红", "绿", "蓝")
# 访问元素
print(colors[0]) # 输出: 红
# 元组是不可变的,因此不能修改元素
# colors[0] = "黄" # 这是非法操作
应用场景:例如用于坐标 (x, y) 的表示:
point = (10, 20)
3. 字典(Dictionary)
特点
- 无序(Python 3.7+ 中插入顺序被保留)
- 键值对结构
- 键是唯一的
常用操作
# 定义字典
person = {"姓名": "张三", "年龄": 25, "城市": "北京"}
# 访问值
print(person["姓名"]) # 输出: 张三
# 添加或修改键值对
person["职业"] = "工程师" # 添加新键值
person["年龄"] = 26 # 修改现有键值
# 删除键值对
del person["城市"] # 删除键值对
# 遍历字典
for key, value in person.items():
print(f"{key}: {value}")
# 获取所有键、值或键值对
print(person.keys()) # 获取所有键
print(person.values()) # 获取所有值
print(person.items()) # 获取键值对
4. 集合(Set)
特点
- 无序
- 元素唯一
- 适合去重和集合运算
常用操作
# 定义集合
nums = {1, 2, 3, 3} # 自动去重
print(nums) # 输出: {1, 2, 3}
# 添加和删除元素
nums.add(4) # 添加元素
nums.remove(3) # 删除元素
# 集合运算
set1 = {1, 2, 3}
set2 = {3, 4, 5}
print(set1 | set2) # 并集: {1, 2, 3, 4, 5}
print(set1 & set2) # 交集: {3}
print(set1 - set2) # 差集: {1, 2}
print(set1 ^ set2) # 对称差集: {1, 2, 4, 5}
5. 队列(Queue)
特点
- 先进先出(FIFO)
- 通常使用
collections.deque
实现
from collections import deque
# 创建队列
queue = deque(["A", "B", "C"])
# 入队
queue.append("D")
# 出队
queue.popleft() # 输出: A
6. 栈(Stack)
特点
- 后进先出(LIFO)
- 可以用列表实现
# 创建栈
stack = []
# 入栈
stack.append("A")
stack.append("B")
# 出栈
print(stack.pop()) # 输出: B
print(stack.pop()) # 输出: A
7. 堆(Heap)
特点
- 用于快速获取最小值或最大值
- 可以用
heapq
模块实现
import heapq
nums = [4, 1, 7, 3, 8]
# 创建最小堆
heapq.heapify(nums)
print(nums) # 输出: [1, 3, 7, 4, 8]
# 弹出最小值
print(heapq.heappop(nums)) # 输出: 1
8. 字符串(String)
字符串也是一种特殊的数据结构,类似于字符数组,但不可变。
常用操作
text = "Hello, Python!"
# 访问字符
print(text[0]) # 输出: H
# 切片
print(text[0:5]) # 输出: Hello
# 常用方法
print(text.lower()) # 转小写
print(text.upper()) # 转大写
print(text.split(", "))# 按分隔符切分
print("Python" in text)# 判断是否包含子串
总结
数据结构 | 是否有序 | 可变性 | 特点和应用 |
---|---|---|---|
列表 | 有序 | 可变 | 存储任意类型,适合动态数据 |
元组 | 有序 | 不可变 | 固定数据 |
字典 | 无序 | 可变 | 键值对,快速查找 |
集合 | 无序 | 可变 | 元素唯一,适合去重和集合运算 |
队列 | 有序 | 可变 | 先进先出 |
栈 | 有序 | 可变 | 后进先出 |
堆 | 无序 | 可变 | 快速获取最小值或最大值 |