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']