# 列表推导式

Jinku Hu 2023年1月30日 2018年7月21日

Python 中的列表推导是非常简洁的语法结构，它通过将函数应用于列表中的每个元素，可用于从其他列表生成列表。以下部分解释并演示了这些表达式的用法。

``````[ <expression> for <element> in <iterable> ]
``````

``````[ <expression> for <element> in <iterable> if <condition> ]
``````

``````squares = [x * x for x in (1, 2, 3, 4)]
# squares: [1, 4, 9, 16]
``````

`for` 表达式一次设置 `x``(1, 2, 3, 4)` 中的每个值。表达式的结果 `x * x` 附加到内部列表。完成后，内部列表将分配给变量 `squares`

``````squares = []
for x in (1, 2, 3, 4):
squares.append(x * x)
# squares: [1, 4, 9, 16]
``````

## 列表推导式中的 `else`

`else` 可以在列表推导式中使用，但要注意其语法。`if...else` 判断是在 `for` 循环之前使用，而不是在以下之后：

``````# 创建一个含有 `apple` 的字符序列，替换其中的非元音字母为 `*`
# 比如 - 'apple' --> ['a', '*', '*', '*' ,'e']

[x for x in 'apple' if x in 'aeiou' else '*']
# SyntaxError: invalid syntax

# 使用 if/else 对时，它们应该在 for 的前面
[x if x in 'aeiou' else '*' for x in 'apple']
#['a', '*', '*', '*', 'e']
``````

## 双迭代

``````def foo(i):
return i + 0.5

for i in range(3):
for x in foo(i):
yield str(x)
``````

``````[str(x)
for i in range(3)
for x in foo(i)
]
``````

## 列表推导式中的空白符

``````[
x for x
in 'foo'
if x not in 'bar'
]
``````
Author: Jinku Hu

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.