摘要:“列表推导式”是 Python 提供的一种简洁而强大的语法结构,用于从序列或可迭代对象中快速生成新列表。它将遍历、处理与收集整合成一行语句,既简洁又高效,符合 Python 强调可读性的风格。
“列表推导式”是 Python 提供的一种简洁而强大的语法结构,用于从序列或可迭代对象中快速生成新列表。它将遍历、处理与收集整合成一行语句,既简洁又高效,符合 Python 强调可读性的风格。
一、什么是列表推导式?
列表推导式(List Comprehension)是一种用单行表达式构造列表的方式,相当于将传统的 for 循环与 append 逻辑压缩成一行。
for 后面的式子用于序列生成(含筛选生成),for 前面的表达式用于迭代计算、转换或映射处理。
相当于:
result = for 变量 in 可迭代对象:if 条件: #可选result.append(表达式)示例 1:平方数列表
squares = [x**2 for x in range(5)]print(squares) # [0, 1, 4, 9, 16]示例 2:字符串转大写
words = ['python', 'java', 'c++']upper_words = [w.upper for w in words]print(upper_words) # ['PYTHON', 'JAVA', 'C++']二、带条件的列表推导式
可以在推导式中添加 if 来筛选元素,也可以通过三元表达式实现条件赋值。
1、条件筛选
在基本语法中,“if 条件”放在 for 之后,常用于保留符合条件的元素。
示例 :筛选偶数
evens = [x for x in range(10) if x % 2 == 0]print(evens) # [0, 2, 4, 6, 8]2、条件赋值
可将三元表达式(if...else)放在 for 之前,用于每个元素内部的条件选择逻辑。
示例:奇偶标签列表
labels = ['even' if x % 2 == 0 else 'odd' for x in range(5)]print(labels) # ['even', 'odd', 'even', 'odd', 'even']三、嵌套循环的列表推导式
当处理笛卡尔积、二维坐标等问题时,列表推导式也支持多个循环嵌套。
[表达式 for i in A for j in B]for i in A:for j in B:...示例:生成二维坐标点 (x, y)
points = [(x, y) for x in range(2) for y in range(3)]print(points) # [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2)]等价于:
for x in range(2):for y in range(3):points.append((x, y))四、补充说明
1、列表推导式适用以下场景:
(1)从原列表筛选符合条件的元素。
(2)对每个元素做映射处理(如大小写转换)。
(3)嵌套循环可生成坐标、矩阵。
(4)快速构造变换后的新列表。
2、可与 range、enumerate、zip 等组合使用。
3、列表推导式是 map 与 filter 的组合替代方案,通常更直观、更 Pythonic。
4、应使用推导式生成新列表,避免在表达式中调用函数修改全局状态。
“点赞有美意,赞赏是鼓励”
来源:欣欣课堂