Python 列表推导式

列表推导式 (List Comprehensions) 是一种特殊的语法,它允许我们从其他列表中创建列表,在处理数字和包含一到两个嵌套 for 循环时非常有用。

摘自 Python 3 教程

列表推导式提供了一种简洁的方式来创建列表。 [...] 或者创建满足特定条件的数据子序列。

阅读 Python 列表推导式:分步介绍 以获得更深入的介绍。

列表推导式

这是我们使用 For 循环从现有集合创建新列表的方式:

# 传统方法:使用 for 循环创建列表
names = ['Charles', 'Susan', 'Patrick', 'George']

new_list = []
for n in names:
    new_list.append(n)

new_list
['Charles', 'Susan', 'Patrick', 'George']

这是我们使用列表推导式完成相同操作的方式:

# 列表推导式:创建新列表的简洁方式
# 语法:[expression for item in iterable]
names = ['Charles', 'Susan', 'Patrick', 'George']

new_list = [n for n in names]  # 创建包含所有名字的列表
new_list
['Charles', 'Susan', 'Patrick', 'George']
测验

登录后即可答题并追踪学习进度

列表推导式的基本语法是什么?
A. [expression for item in iterable]
B. (expression for item in iterable)
C. {expression for item in iterable}
D. expression for item in iterable

我们可以对数字做同样的事情:

# 嵌套列表推导式:从两个范围创建元组
# 等同于嵌套的 for 循环
n = [(a, b) for a in range(1, 3) for b in range(1, 3)]
n
[(1, 1), (1, 2), (2, 1), (2, 2)]

添加条件判断

如果我们想让 new_list 只包含以 C 开头的名字,使用 for 循环,我们会这样做:

# 传统方法:使用 if 条件进行过滤
names = ['Charles', 'Susan', 'Patrick', 'George', 'Carol']

new_list = []
for n in names:
    if n.startswith('C'):  # 过滤以 'C' 开头的名字
        new_list.append(n)

print(new_list)
['Charles', 'Carol']

在列表推导式中,我们将 if 语句放在末尾:

# 带条件的列表推导式:过滤项目
# 语法:[expression for item in iterable if condition]
new_list = [n for n in names if n.startswith('C')]
print(new_list)
['Charles', 'Carol']
测验

登录后即可答题并追踪学习进度

列表推导式中的 if 条件放在哪里?
A. 在 for 关键字之前
B. 在 for 子句之后
C. 在表达式内部
D. 在方括号之前

要在列表推导式中使用 if-else 语句:

# 带 if-else 的列表推导式:条件表达式
# 语法:[expression_if_true if condition else expression_if_false for item in iterable]
nums = [1, 2, 3, 4, 5, 6]
new_list = [num*2 if num % 2 == 0 else num for num in nums]  # 将偶数翻倍
print(new_list)
[1, 4, 3, 8, 5, 12]

集合和字典推导式

`list` 推导式的基础知识也适用于 集合 (sets) 和 字典 (dictionaries)。

集合推导式

# 集合推导式:使用推导式语法创建集合
# 语法:{expression for item in iterable}
b = {"abc", "def"}
{s.upper() for s in b}  # 将所有字符串转换为大写
{"ABC", "DEF"}

字典推导式

# 字典推导式:交换键和值
# 语法:{key_expression: value_expression for item in iterable}
c = {'name': 'Pooka', 'age': 5}
{v: k for k, v in c.items()}  # 反转键值对
{'Pooka': 'name', 5: 'age'}
测验

登录后即可答题并追踪学习进度

字典推导式使用什么语法?
A. [key: value for item in iterable]
B. (key: value for item in iterable)
C. {key_expression: value_expression for item in iterable}
D. {key, value for item in iterable}

列表推导式可以从字典生成:

# 从字典创建列表推导式:创建格式化的字符串
c = {'name': 'Pooka', 'age': 5}
["{}:{}".format(k.upper(), v) for k, v in c.items()]  # 格式化为 "KEY:value"
['NAME:Pooka', 'AGE:5']

相关链接