列表推导式是Python中简洁高效生成列表的语法,支持基础生成、条件筛选、嵌套循环及函数调用,但需避免副作用且不宜过度嵌套。

列表推导式是 Python 中简洁高效生成列表的核心语法,用一行代码替代 for 循环 + append,既可读又快。
基础写法:从一个序列生成新列表
最常见形式:[表达式 for 变量 in 可迭代对象]。比如把一串数字平方:
-
[x ** 2 for x in [1, 2, 3, 4]]→[1, 4, 9, 16] - 等价于手动循环:
res = []; for x in [1,2,3,4]: res.append(x**2)
带条件筛选:只保留符合条件的元素
在末尾加 if 条件,实现过滤。注意不能用 elif 或 else 单独出现:
-
[x for x in range(10) if x % 2 == 0]→[0, 2, 4, 6, 8] - 想同时处理奇数为负、偶数为正?用三元表达式:
[x if x % 2 == 0 else -x for x in range(5)]
嵌套循环:处理二维结构或笛卡尔积
多个 for 并列,顺序和嵌套 for 循环一致。常用于展平二维列表或生成坐标对:
立即学习“Python免费学习笔记(深入)”;
- 展平:
[num for row in [[1,2], [3,4], [5]] for num in row]→[1, 2, 3, 4, 5] - 坐标组合:
[(x, y) for x in [1,2] for y in ['a','b']]→[(1, 'a'), (1, 'b'), (2, 'a'), (2, 'b')]
配合函数与方法:提升表达力
推导式中可直接调用函数(包括自定义函数),让逻辑更清晰:
-
[len(s) for s in ['hello', 'hi', 'python']]→[5, 2, 6] - 预处理再计算:
[s.upper().replace('A', '*') for s in ['apple', 'banana']] - 避免副作用:推导式里别调用 print() 或修改外部变量,它本意是纯表达式
不复杂但容易忽略:括号必须是方括号;逗号不能少;变量作用域仅限推导式内部;过度嵌套会降低可读性,三层以上建议拆成普通循环。










