Python推导式的类型、特点及使用建议
Python推导式的类型、特点及使用建议
Python 推导式是一种简洁创建序列(列表、字典、集合)或生成器的语法糖,核心是用一行 / 多行简洁代码实现循环 + 条件判断的逻辑,大幅简化代码量。以下是分类总结:
一、核心类型
1. 列表推导式
语法:[表达式 for 变量 in 可迭代对象 if 条件] 作用:快速生成列表,替代for+append的繁琐写法
# 基础:生成1-5的平方
squares = [x**2 for x in range(1,6)]
# 带条件:筛选偶数的平方
even_squares = [x**2 for x in range(1,10) if x%2==0]
# 嵌套循环:展平二维列表
flat = [num for row in [[1,2],[3,4]] for num in row] # [1,2,3,4]
2. 字典推导式
语法:{键表达式: 值表达式 for 变量 in 可迭代对象 if 条件} 作用:直接生成字典,替代for+赋值
# 基础:数字到平方的映射
square_dict = {x: x**2 for x in range(1,6)}
# 带条件:筛选键为偶数的项
even_dict = {x: x**2 for x in range(1,10) if x%2==0}
3. 集合推导式
语法:{表达式 for 变量 in 可迭代对象 if 条件} 作用:生成去重的集合,特性同集合(无序、唯一)
# 基础:生成平方的集合(自动去重)
square_set = {x**2 for x in [-2,-1,0,1,2]} # {0,1,4}
# 带条件:筛选大于0的平方
pos_set = {x**2 for x in range(-5,5) if x**2 > 0}
4. 生成器推导式
语法:(表达式 for 变量 in 可迭代对象 if 条件) 作用:生成惰性迭代器(节省内存),需迭代时才计算值
# 生成器对象(不立即计算)
gen = (x**2 for x in range(1,6))
# 迭代取值
print(list(gen)) # [1,4,9,16,25]
二、核心特点
简洁性:用一行代码替代传统的循环 + 条件 + 追加操作
可读性:逻辑清晰(表达式→循环→条件),适合简单场景
效率:底层优化,比手动循环更快
灵活性:支持嵌套循环、多条件判断
三、使用建议
适合场景:简单的序列生成(如筛选、转换)
避免场景:逻辑过于复杂(嵌套多层 / 多条件),否则可读性下降(建议改用普通循环)
推导式的核心是 “用简洁语法实现循环逻辑”,根据需求选择对应类型即可





