列表推导式是Python中创建列表的简洁语法,基本形式为[表达式 for 变量 in 可迭代对象 if 条件],支持条件筛选、分支表达式和嵌套循环,但逻辑复杂时应改用普通循环以保证可读性。

列表推导式是 Python 中最常用、也最体现“Pythonic”风格的语法之一——它用一行代码替代多行循环,既清晰又高效。掌握它,能立刻提升代码可读性和编写速度。
什么是列表推导式?
列表推导式是一种创建新列表的简洁写法,基本结构为:
[表达式 for 变量 in 可迭代对象 if 条件]
它本质等价于一个带条件的 for 循环,但更紧凑、更易读。
比如把一个数字列表全平方:
- 传统写法:
squares = []
for x in [1, 2, 3, 4]:
squares.append(x ** 2)
- 列表推导式写法:
squares = [x ** 2 for x in [1, 2, 3, 4]]
带条件筛选:if 的位置很关键
if 子句写在推导式末尾,用于过滤元素,不是在循环体内做判断。它只保留满足条件的项,再对这些项执行前面的表达式。
立即学习“Python免费学习笔记(深入)”;
例如:提取字符串列表中长度大于 3 的单词,并转为大写:
words = ['cat', 'dog', 'elephant', 'ant']
result = [w.upper() for w in words if len(w) > 3]
→ ['ELEPHANT']
注意:if 不能写成 if...else... 放在末尾;如果需要对每个元素做分支处理(即“有 else”),要把 if-else 移到表达式位置:
[x if x > 0 else 0 for x in [-2, -1, 0, 1, 2]]
→ [0, 0, 0, 1, 2]
嵌套循环:二维结构一键展开
当需要模拟双重 for 循环(如生成坐标、展平二维列表)时,可以在推导式中写多个 for ——顺序和缩进逻辑一致,左边的 for 是外层,右边的是内层。
例如展平嵌套列表:
matrix = [[1, 2], [3, 4], [5, 6]]
flattened = [num for row in matrix for num in row]
→ [1, 2, 3, 4, 5, 6]
再比如生成所有合法坐标(x, y)组合,其中 x ∈ [0,1],y ∈ [0,2]:
coords = [(x, y) for x in range(2) for y in range(3)]
→ [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]
何时不该用列表推导式?
它强大,但不是万能的。以下情况建议回归普通循环:
- 逻辑复杂,一行塞不下或难以理解(比如含 try/except、多步计算、状态累积)
- 不需要一次性生成全部结果(考虑生成器表达式:用圆括号 (x**2 for x in nums))
- 目标不是列表(比如想修改原列表、统计频次、构造字典——这时用 {k: v for ...} 或 {k: v for ...} 字典推导更合适)
记住:可读性永远优先于“看起来很酷”。写完推导式,自己读一遍,如果要停顿思考才明白,就该拆开了。










