2026-10-22 09:23:19
Python列表推导式是一种通过简洁语法快速生成列表的方法,其核心形式为[表达式 for 变量 in 列表]或[表达式 for 变量 in 列表 if 条件],支持嵌套循环、条件过滤及函数调用等操作。
一、基础语法形式单循环无条件格式:[表达式 for 变量 in 可迭代对象]示例:生成平方数列表
li = [1,2,3,4,5]print([x2 for x in li]) # 输出:[1, 4, 9, 16, 25]单循环带条件格式:[表达式 for 变量 in 可迭代对象 if 条件]示例:筛选大于5的数的平方
li = [1,2,3,4,5,6,7,8,9]print([x2 for x in li if x > 5]) # 输出:[36, 49, 64, 81]嵌套循环通过多个for实现多维数据生成,例如生成笛卡尔积:
print([(x, y) for x in range(3) for y in range(2)]) # 输出:[(0, 0), (0, 1), (1, 0), (1, 1), (2, 0), (2, 1)]多条件过滤在循环中可叠加多个if条件(逻辑与关系):
print([x for x in range(10) if x % 2 == 0 if x > 3]) # 输出:[4, 6, 8](等价于x%2==0且x>3)结合函数操作表达式部分可调用函数对变量进行处理:
def double(x): return x * 2testList = [1,2,3,4]print([double(i) for i in testList]) # 输出:[2, 4, 6, 8]生成其他数据结构
字典:通过键值对表达式生成字典
li = [1,2,3,4,5]print({x: x*10 for x in li}) # 输出:{1: 10, 2: 20, ..., 5: 50}元组列表:复杂条件下的元组组合
print([(x, y) for x in range(10) if x % 2 != 0 for y in range(10) if y > 7 and y != 8]) # 输出:[(1, 9), (3, 9), ..., (9, 9)]向量运算对两个列表对应位置元素相加:
vec = [2,4,6]vec2 = [4,3,-9]print([vec[i] + vec2[i] for i in range(len(vec))]) # 输出:[6, 7, -3]矩阵转置通过嵌套列表推导式实现矩阵行列转换:
matrix = [[1,2,3], [4,5,6]]transpose = [[row[i] for row in matrix] for i in range(3)]print(transpose) # 输出:[[1,4], [2,5], [3,6]]字符串处理批量转换字符串大小写:
words = ["Hello", "WORLD"]print([word.lower() for word in words]) # 输出:['hello', 'world']可读性优先复杂逻辑建议拆分为多行或使用普通循环,例如:
# 不推荐:嵌套过深result = [(x, y, z) for x in range(5) for y in range(5) if y > x for z in range(5) if z > y]# 推荐:分步处理result = []for x in range(5): for y in range(5): if y <= x: continue for z in range(5): if z > y: result.append((x, y, z))性能考量列表推导式通常比等效的for循环更快,但过度使用(如生成大型列表)可能增加内存消耗。
避免副作用表达式部分应仅包含纯计算,避免修改外部变量(如i += 1),否则可能导致意外行为。
总结:列表推导式通过for循环处理变量,结合if条件实现灵活的数据生成,支持嵌套结构、函数调用及多种数据结构转换。其核心优势在于代码简洁性,但需在复杂场景下权衡可读性与性能。