🗃️ Python数据结构深度解析:列表、字典、元组、集合完全指南
引言
Python 提供了四种核心的内置数据结构:列表(List)、字典(Dict)、元组(Tuple)和集合(Set)。它们各有特点,适用于不同的场景。本文将深入剖析这四种数据结构,帮助你掌握它们的用法和最佳实践。
一、列表(List)——有序可变序列
1.1 基本操作
# 创建列表
fruits = ['apple', 'banana', 'cherry']
numbers = [1, 2, 3, 4, 5]
mixed = [1, 'hello', 3.14, True] # 可混合类型
# 索引和切片
print(fruits[0]) # 'apple'
print(fruits[-1]) # 'cherry' (最后一个)
print(fruits[0:2]) # ['apple', 'banana']
# 常用方法
fruits.append('orange') # 末尾添加
fruits.insert(1, 'mango') # 指定位置插入
fruits.remove('banana') # 删除指定元素
popped = fruits.pop() # 删除并返回末尾元素
fruits.sort() # 原地排序
fruits.reverse() # 原地反转
1.2 列表推导式
# 传统方式
squares = []
for x in range(10):
squares.append(x**2)
# 列表推导式(更Pythonic)
squares = [x**2 for x in range(10)]
# 带条件的推导式
evens = [x for x in range(20) if x % 2 == 0]
# 嵌套推导式
matrix = [[i*j for j in range(3)] for i in range(3)]
# [[0, 0, 0], [0, 1, 2], [0, 2, 4]]
二、字典(Dict)——键值对映射
2.1 基本操作
# 创建字典
user = {
'name': '张三',
'age': 25,
'city': '北京'
}
# 访问和修改
print(user['name']) # '张三'
user['age'] = 26 # 修改值
user['email'] = 'zhang@example.com' # 添加新键
# 安全访问
age = user.get('age', 0) # 不存在返回默认值0
name = user.pop('name') # 删除并返回值
# 遍历字典
for key in user: # 遍历键
print(key, user[key])
for key, value in user.items(): # 遍历键值对
print(f"{key}: {value}")
for value in user.values(): # 遍历值
print(value)
2.2 字典常用技巧
# 合并字典(Python 3.9+)
dict1 = {'a': 1, 'b': 2}
dict2 = {'b': 3, 'c': 4}
merged = dict1 | dict2 # {'a': 1, 'b': 3, 'c': 4}
# 字典推导式
squares_dict = {x: x**2 for x in range(5)}
# {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
# fromkeys创建默认字典
keys = ['a', 'b', 'c']
default_dict = dict.fromkeys(keys, 0) # {'a': 0, 'b': 0, 'c': 0}
# defaultdict自动创建默认值
from collections import defaultdict
count = defaultdict(int)
count['apple'] += 1 # 不需要先检查key是否存在
三、元组(Tuple)——不可变有序序列
3.1 基本特性
# 创建元组 t = (1, 2, 3) t = 1, 2, 3 # 括号可省略 single = (1,) # 单元素元组需要逗号! # 不可变性 t[0] = 10 # TypeError: 'tuple' object does not support item assignment # 元组解包 a, b, c = t print(a, b, c) # 1 2 3 # 交换变量(优雅!) x, y = 10, 20 x, y = y, x # x=20, y=10 # 扩展解包 first, *rest = (1, 2, 3, 4, 5) print(first) # 1 print(rest) # [2, 3, 4, 5]
3.2 元组的使用场景
# 1. 函数返回多个值
def get_min_max(numbers):
return min(numbers), max(numbers)
minimum, maximum = get_min_max([3, 1, 4, 1, 5])
# 2. 作为字典的键(列表不行!)
locations = {
(0, 0): '原点',
(1, 0): '东',
(0, 1): '北'
}
# 3. 数据保护
DAYS = ('周一', '周二', '周三', '周四', '周五', '周六', '周日')
四、集合(Set)——无序不重复元素
4.1 基本操作
# 创建集合
s = {1, 2, 3, 3, 3} # {1, 2, 3} 自动去重
s = set([1, 2, 2, 3, 3, 3]) # 从列表创建
empty = set() # 空集合(不能是{},那是字典)
# 添加和删除
s.add(4)
s.remove(2) # 不存在会报错
s.discard(10) # 不存在不会报错
popped = s.pop() # 随机移除并返回一个元素
# 集合运算
a = {1, 2, 3, 4}
b = {3, 4, 5, 6}
print(a | b) # 并集: {1, 2, 3, 4, 5, 6}
print(a & b) # 交集: {3, 4}
print(a - b) # 差集: {1, 2}
print(a ^ b) # 对称差集: {1, 2, 5, 6}
4.2 实用场景
# 1. 快速去重
numbers = [1, 2, 2, 3, 3, 3, 4]
unique = list(set(numbers)) # [1, 2, 3, 4]
# 2. 成员检测(比列表快得多!)
large_set = set(range(1000000))
999999 in large_set # O(1) 超快
# 3. 集合推导式
squares = {x**2 for x in range(10)} # {0, 1, 4, 9, 16, 25, 36, 49, 64, 81}
# 4. 找共同好友
alice_friends = {'Bob', 'Charlie', 'David'}
bob_friends = {'Alice', 'Charlie', 'Eve'}
common = alice_friends & bob_friends # {'Charlie'}
五、四种结构对比与选择
| 特性 | 列表 | 字典 | 元组 | 集合 |
|---|---|---|---|---|
| 有序 | ✓ | ✓(Python 3.7+) | ✓ | ✗ |
| 可变 | ✓ | ✓ | ✗ | ✓ |
| 可哈希(作key) | ✗ | ✗ | ✓ | ✗ |
| 重复元素 | 允许 | 键唯一 | 允许 | 不重复 |
| 索引访问 | 整数索引 | 键索引 | 整数索引 | 无 |
总结
掌握这四种数据结构是Python编程的基础:
- 列表:需要有序可变序列时使用
- 字典:键值映射,查找最快的结构
- 元组:不可变数据,适合作为字典键
- 集合:去重和集合运算的首选
熟练运用它们,能让你的Python代码更加简洁、高效!
本文内容由AI辅助生成,仅供学习参考。

浙公网安备 33010602011771号