列表、元组、字典、集合怎么选

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 元素唯一 去重/集合运算

掌握这四种容器类型,你就能应对大多数数据处理场景。