python 元组、列表、集合、字典有什么区别,分别用在哪里?

2026-07-27 09:52:55

四大数据结构内存模型 数据结构选型决策树

两图在手,核心差异就清楚了。下面补充完整对比表和实战代码示例:

完整对比表

特性 List 列表 Tuple 元组 Set 集合 Dict 字典
语法 [1, 2, 3] (1, 2, 3) {1, 2, 3} {"a": 1}
有序 有序 有序 无序 3.7+ 有序
可变 可变 不可变 可变 可变
重复 允许 允许 自动去重 键不可重复
索引访问 lst[0] tup[0] 不支持 d["key"]
查找效率 O(n) O(n) O(1) O(1)
可哈希
内存占用 较大 最小 中等 较大
创建速度 最快

实战代码:各自该用在哪

List — 动态数据序列

# 场景: 待办事项列表、购物车、操作日志
todos = ["写报告", "开会", "发邮件"]
todos.append("加班")          # 动态添加
todos.insert(0, "喝咖啡")     # 插入
todos.remove("开会")          # 删除
for i, task in enumerate(todos):
    print(f"{i}: {task}")

Tuple — 不可变的固定数据

# 场景1: 坐标点、RGB颜色、配置常量
POINT = (116.4, 39.9)         # 经纬度, 不应被修改
RED = (255, 0, 0)

# 场景2: 函数返回多个值
def min_max(nums):
    return (min(nums), max(nums))
lo, hi = min_max([3, 1, 4, 1, 5])

# 场景3: 字典的键 (list 不行, tuple 可以)
locations = {
    (39.9, 116.4): "北京",
    (31.2, 121.5): "上海",
}

Set — 去重与集合运算

# 场景1: 去重
tags = ["python", "java", "python", "go", "java"]
unique_tags = set(tags)       # {'python', 'java', 'go'}

# 场景2: 集合运算
frontend = {"React", "Vue", "CSS"}
backend = {"Python", "Java", "CSS"}
both = frontend & backend       # 交集: {"CSS"}
all_skills = frontend | backend # 并集: 全部
only_front = frontend - backend # 差集: {"React", "Vue"}

# 场景3: 快速成员判断 (O(1) vs list 的 O(n))
valid_ids = {1001, 1002, 1003}
if user_id in valid_ids:        # 极快
    print("已注册")

Dict — 键值映射

# 场景1: 对象属性 / 配置
user = {"name": "Alice", "age": 25, "city": "Shanghai"}

# 场景2: 计数 / 频率统计
from collections import Counter
words = ["apple", "banana", "apple", "cherry", "banana", "apple"]
count = dict(Counter(words))    # {"apple": 3, "banana": 2, "cherry": 1}

# 场景3: 缓存 / 查找表
price = {"apple": 5.0, "banana": 3.5, "cherry": 12.0}
total = sum(price[item] for item in cart)

# 场景4: 分组
from collections import defaultdict
groups = defaultdict(list)
for person in people:
    groups[person["department"]].append(person["name"])

速记口诀

要改用 list,不改用 tuple,去重用 set,查找用 dict

一句话总结各结构的"人格":

  • List = 万能收纳箱,什么都能放,随时增删
  • Tuple = 封蜡的盒子,放进去就别想动,安全又轻量
  • Set = 独一无二俱乐部,重复进不来,还会做交集并集
  • Dict = 电话簿,报个名字(键)就能找到人(值)
 
免责申明:本站内容大部分来自互联网,部分来源于个人原创。仅供个人学习使用,本站不承担任何法律责任。如有侵权请联系删除!