
两图在手,核心差异就清楚了。下面补充完整对比表和实战代码示例:
完整对比表
| 特性 |
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 = 电话簿,报个名字(键)就能找到人(值)
免责申明:本站内容大部分来自互联网,部分来源于个人原创。仅供个人学习使用,本站不承担任何法律责任。如有侵权请联系删除!