我们前面学过for循环跟while循环,那大家有没有想过,将这些循环换种形式写,使代码更简洁更优雅呢?
推导式(特别是列表推导式)是 Python 中一种强大且优雅的语法结构。共有三种推导:列表推导式、集合推导式、字典推导式。
推导式主要有以下几个好处:
1、代码简洁、可读性高
推导式能用一行代码完成多行循环才能实现的功能,将“创建新集合”的意图表达得非常清晰。例如,传统的过滤和映射操作被浓缩在一个直观的表达式里。
2、执行效率更高
由于其实现方式更贴近解释器底层,列表推导式在多数情况下的执行速度比普通的 for循环稍快。对于数据转换和过滤这类常见操作,使用推导式能获得一定的性能提升。
3、功能强大且表达力强
推导式不仅限于列表,还支持生成器、字典和集合。通过结合条件语句(if)和嵌套循环,可以用非常紧凑的语法实现复杂的数据处理逻辑,比如您之前看到的嵌套循环生成乘法表案例。
4、符合Python的哲学
它很好地体现了 Python “优雅、明确、简单”的设计哲学。推导式让代码的读写更接近于自然语言描述的逻辑,比如“一个由x的平方组成的列表,其中x来自某个范围且x为偶数”。
while循环:
# 初始化计数器i = 0list1 = []# 编写循环条件while i <= 9: list1.append(i) # 更新计数器 i += 1print(list1)
for循环:
list1 = []# 编写for循环for i in range(0, 10): list1.append(i)print(list1)
基本语法:
变量名 = [表达式 for 变量 in 列表 for 变量 in 列表]变量名 = [表达式 for 变量 in 列表 if 条件]
list1 = []# 编写for循环for i in range(0, 10): list1.append(i)print(list1)
列表推导式:
list1 = [i for i in range(10)]print(list1)
执行原理:[i for i in range(10)]
列表推导式先运行表达式右边的内容:当第一次遍历时:i = 0,其得到变量i的结果后,会放入最左侧的变量i中,这个时候列表中就是[0];当第二次遍历时:i = 1,其得到变量i的结果后,会追加最左侧的变量i中,这个时候列表中就是[0, 1]...当最后一次遍历时:i = 9,其得到变量i的结果后,会追加最左侧的变量i中,这个时候列表中就是[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
在使用列表推导式时候,我们除了可以使用for循环,其实我们还可以在其遍历的过程中,引入if条件判断。
变量 = [表达式 for 临时变量 in 序列 if 条件判断]等价于for 临时变量 in 序列: if 条件判
list1 = [i for i in range(0,9) if i % 2 == 0]print(list1)
for 临时变量 in range(n): for 临时变量 in range(n):
基本语法:
变量 = [表达式 for 临时变量 in 序列 for 临时变量 in 序列]
创建列表 => [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
分析:
原生代码:
list1 = []# 外层循环for i in range(1, 3): # 内层循环 for j in range(0, 3): tuple1 = (i, j) list1.append(tuple1)print(list1)
列表推导式:
list1 = [(i, j) for i in range(1, 3) for j in range(0, 3)]print(list1)
今日学习完毕,课后作业:
使用for循环嵌套列表推导式,生成一个9*9乘法表。