Python 中列表(List)元组(Tuple)字典(Dict)和集合(Set)的特点与区别
| 特性 | 列表 (List) | 元组 (Tuple) | 字典 (Dict) | 集合 (Set) |
|---|---|---|---|---|
| 语法符号 | [] |
() |
{key: value} |
{} 或 set() |
| 有序性 | ✅ 有序 | ✅ 有序 | ✅ 有序 (Python 3.7+) | ❌ 无序 |
| 可变性 | ✅ 可变 | ❌ 不可变 | ✅ 可变 (值可变,键不可变) | ✅ 可变 (frozenset不可变) |
| 元素重复 | ✅ 允许重复 | ✅ 允许重复 | ❌ 键(Key)唯一,值(Value)可重复 | ❌ 不允许重复 |
| 索引/切片 | ✅ 支持整数索引 | ✅ 支持整数索引 | ✅ 支持键(Key)访问,不支持整数索引 | ❌ 不支持索引/切片 |
| 嵌套能力 | ✅ 可嵌套任意类型 | ✅ 可嵌套任意类型 | ✅ 键需可哈希,值可任意嵌套 | ⚠️ 仅可包含可哈希(不可变)元素 |
| 查询速度 | 🐢 O(n) 线性查找 | 🐢 O(n) 线性查找 | 🚀 O(1) 哈希查找 | 🚀 O(1) 哈希查找 |
| 内存占用 | 较大 | 最小 (固定大小优化) | 较大 (哈希表开销) | 中等 |
| 常用操作 | 增删改查、排序、切片 | 读取、解包、作为字典键 | 键值对存取、遍历、合并 | 去重、交/并/差集运算 |
| 典型用途 | 通用数据容器、栈、队列 | 常量记录、函数多返回值、字典键 | 映射关系、JSON数据、配置 | 去重、成员检测、数学集合运算 |
列表推导式和生成器表达式、集合推导式和字典推导式
-
列表推导式
语法:[表达式 for 变量 in 可迭代对象 if 条件]
返回值:一个完整的 list
特点:立即执行,将所有结果存入内存,支持索引、切片、修改。
示例:squares = [x*x for x in range(5)] # → [0, 1, 4, 9, 16] -
生成器表达式
语法:(表达式 for 变量 in 可迭代对象 if 条件)
返回值:一个 generator 迭代器
特点:惰性求值,按需逐个产出,不占额外内存,只能遍历一次。作为函数唯一参数时外层括号可省略。
示例:
gen = (x*x for x in range(5)) # → <generator object>
total = sum(x*x for x in range(5)) # 省略括号的写法 -
字典推导式
语法:{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}
返回值:一个 dict
特点:构建键值对映射,键必须可哈希。同样自动去重(后出现的键覆盖先出现的)。
示例:
word_lengths = {w: len(w) for w in ["apple", "pear", "banana"]}
# → {'apple': 5, 'pear': 4, 'banana': 6} -
集合推导式
语法:{表达式 for 变量 in 可迭代对象 if 条件}
返回值:一个 set
特点:自动去重、无序。注意与字典推导式的区分方式是看冒号 : 是否存在。
示例:
unique_lengths = {len(w) for w in ["apple", "pear", "banana", "kiwi"]}
# → {4, 5, 6} (自动去重)
四者对比速查表
| 类型 | 括号 | 返回值 | 内存 | 是否有序 | 是否去重 | 典型用途 |
|---|---|---|---|---|---|---|
| 列表推导式 | [] |
list |
全量加载 | ✅ 有序 | ❌ | 需要保留、索引、修改结果 |
| 生成器表达式 | () |
generator |
惰性逐个 | ✅ 有序 | ❌ | 传给聚合函数、处理大数据流 |
| 字典推导式 | {k:v} |
dict |
全量加载 | ✅ 插入有序 | ✅(键) | 构建映射、数据转换 |
| 集合推导式 | {} |
set |
全量加载 | ❌ 无序 | ✅ | 去重、成员检测 |

浙公网安备 33010602011771号