列表、元组、字典、集合怎么选
Python 提供了四种常用的容器类型:列表(list)、元组(tuple)、字典(dict)、集合(set)。本文介绍它们的特性和适用场景,帮助你做出正确选择。
1. 列表(List)——有序可变的序列
列表是最常用的数据结构,适合需要频繁修改的数据集合。
# 创建列表
fruits = ["apple", "banana", "orange"]
numbers = [1, 2, 3, 4, 5]
mixed = [1, "hello", 3.14, True]
# 列表推导式
squares = [x**2 for x in range(5)] # [0, 1, 4, 9, 16]
evens = [x for x in range(10) if x % 2 == 0] # [0, 2, 4, 6, 8]
列表常用操作
fruits = ["apple", "banana"]
# 添加元素
fruits.append("orange") # 末尾添加
fruits.insert(1, "grape") # 指定位置插入
fruits.extend(["pear", "kiwi"]) # 批量添加
# 删除元素
fruits.pop() # 末尾删除并返回
fruits.pop(0) # 删除指定位置
fruits.remove("banana") # 删除第一个匹配项
del fruits[0] # 通过索引删除
# 修改元素
fruits[0] = "watermelon"
# 查找
index = fruits.index("banana") # 返回索引
count = fruits.count("apple") # 计数
列表切片
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
numbers[0] # 0 第一个元素
numbers[-1] # 9 最后一个
numbers[0:5] # [0,1,2,3,4] 切片
numbers[::2] # [0,2,4,6,8] 步长为2
numbers[::-1] # [9,8,7,6,5,4,3,2,1,0] 反转
2. 元组(Tuple)——有序不可变的序列
元组与列表类似,但创建后不能修改,适用于固定数据。
# 创建元组
point = (10, 20)
colors = ("red", "green", "blue")
single = (1,) # 单元素元组需要逗号
# 元组解包
x, y = point # x=10, y=20
a, b, c = colors # a="red", b="green", c="blue"
# 交换变量(常用技巧)
a, b = b, a
元组特性
# 元组不可变,但内部如果是可变对象则可修改
data = ([1, 2], [3, 4])
data[0].append(3) # 合法:修改的是列表
# data[0] = [1,2,3] # 错误:不能修改元组元素
# 元组用作字典键
location = {(0, 0): "origin", (1, 0): "right"}
列表与元组对比
| 特性 | 列表 | 元组 |
|---|---|---|
| 可变性 | 可修改 | 不可修改 |
| 性能 | 稍慢 | 稍快 |
| 内存 | 占用多 | 占用少 |
| 用途 | 动态数据 | 固定数据 |
3. 字典(Dict)——键值对映射
字典通过键快速查找值,适合需要快速检索的数据。
# 创建字典
person = {
"name": "Alice",
"age": 25,
"city": "Beijing"
}
# 字典推导式
squares = {x: x**2 for x in range(5)} # {0:0, 1:1, 2:4, 3:9, 4:16}
字典操作
person = {"name": "Alice", "age": 25}
# 访问
person["name"] # "Alice"
person.get("name") # "Alice"
person.get("gender", "unknown") # "unknown" 默认值
# 添加/修改
person["city"] = "Shanghai"
person.update({"age": 26, "gender": "female"}) # 批量更新
# 删除
person.pop("age") # 删除并返回值
del person["age"]
# 遍历
for key in person:
print(key, person[key])
for key, value in person.items():
print(f"{key}: {value}")
4. 集合(Set)——无序不重复元素
集合用于去重和集合运算,不允许重复元素。
# 创建集合
fruits = {"apple", "banana", "orange"}
numbers = set([1, 2, 2, 3, 3, 3]) # {1, 2, 3} 自动去重
# 集合推导式
squares = {x**2 for x in range(5)} # {0, 1, 4, 9, 16}
集合操作
set1 = {1, 2, 3, 4}
set2 = {3, 4, 5, 6}
# 并集
set1 | set2 # {1, 2, 3, 4, 5, 6}
set1.union(set2)
# 交集
set1 & set2 # {3, 4}
set1.intersection(set2)
# 差集
set1 - set2 # {1, 2}
set1.difference(set2)
# 对称差集
set1 ^ set2 # {1, 2, 5, 6}
set1.symmetric_difference(set2)
# 添加/删除
set1.add(5)
set1.remove(1) # 删除,不存在会报错
set1.discard(1) # 删除,不存在不报错
set1.pop() # 随机删除并返回
5. 如何选择
根据你的需求选择合适的容器类型:
需要修改数据?用列表
# 需要添加、删除、修改元素
tasks = []
tasks.append("read")
tasks.append("write")
tasks.pop()
数据不变?用元组
# 配置、坐标、枚举等固定数据
RGB = (255, 0, 0)
WEEKS = ("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun")
需要快速查找?用字典
# 通过键查找值
users = {"alice": 25, "bob": 30}
print(users["alice"]) # 25
需要去重或集合运算?用集合
# 去除重复
unique = list(set(duplicates))
# 判断是否有交集
if set1 & set2:
print("有交集")
快速对照表
| 类型 | 有序 | 可变 | 重复 | 用途 |
|---|---|---|---|---|
| list | ✓ | ✓ | ✓ | 动态列表 |
| tuple | ✓ | ✗ | ✓ | 固定序列 |
| dict | ✗ | ✓ | 键唯一 | 键值映射 |
| set | ✗ | ✓ | 元素唯一 | 去重/集合运算 |
掌握这四种容器类型,你就能应对大多数数据处理场景。