AIGC标识 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数据、配置 去重、成员检测、数学集合运算

列表推导式和生成器表达式、集合推导式和字典推导式

  1. 列表推导式
    语法:[表达式 for 变量 in 可迭代对象 if 条件]
    返回值:一个完整的 list
    特点:立即执行,将所有结果存入内存,支持索引、切片、修改。
    示例:squares = [x*x for x in range(5)] # → [0, 1, 4, 9, 16]

  2. 生成器表达式
    语法:(表达式 for 变量 in 可迭代对象 if 条件)
    返回值:一个 generator 迭代器
    特点:惰性求值,按需逐个产出,不占额外内存,只能遍历一次。作为函数唯一参数时外层括号可省略。
    示例:
    gen = (x*x for x in range(5)) # → <generator object>
    total = sum(x*x for x in range(5)) # 省略括号的写法

  3. 字典推导式
    语法:{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件}
    返回值:一个 dict
    特点:构建键值对映射,键必须可哈希。同样自动去重(后出现的键覆盖先出现的)。
    示例:
    word_lengths = {w: len(w) for w in ["apple", "pear", "banana"]}
    # → {'apple': 5, 'pear': 4, 'banana': 6}

  4. 集合推导式
    语法:{表达式 for 变量 in 可迭代对象 if 条件}
    返回值:一个 set
    特点:自动去重、无序。注意与字典推导式的区分方式是看冒号 : 是否存在。
    示例:
    unique_lengths = {len(w) for w in ["apple", "pear", "banana", "kiwi"]}
    # → {4, 5, 6} (自动去重)

四者对比速查表

类型 括号 返回值 内存 是否有序 是否去重 典型用途
列表推导式 [] list 全量加载 ✅ 有序 需要保留、索引、修改结果
生成器表达式 () generator 惰性逐个 ✅ 有序 传给聚合函数、处理大数据流
字典推导式 {k:v} dict 全量加载 ✅ 插入有序 ✅(键) 构建映射、数据转换
集合推导式 {} set 全量加载 ❌ 无序 去重、成员检测
posted @ 2026-08-05 16:09  不知者buwei  阅读(0)  评论(0)    收藏  举报