推导式:
推导式comprehensions(又称解析式),是Python的一种独有特性。推导式是可以从一个数据序列 构建 另一个 新的数据序列(一个有规律的列表或控制一个有规律列表)的结构体。 共有三种推导:列表推导式
、集合推导式
、字典推导式
。
[1, 2, 3] 推导式 [1, 4, 9]
白话:就是把原先分开写的,组合在一起,放一行写。省事。
comprehensions n.理解,领悟:对某事物的认识和把握。 推导式 推导
(序列 :包括 字符串、列表、元组、集合以及字典)
使用推导式原因:
案例:创建一个0-9的列表
while循环:
----相关链接Python---循环---while循环-CSDN博客Python--列表及其应用场景---增、删、改、查。-CSDN博客
# 初始化计数器 i = 0 list1 = [] # 编写循环条件 while i <= 9: list1.append(i) # 更新计数器 i += 1 print(list1)
for循环:
----相关链接Python-----for循环基本语法及其应用---对序列进行遍历循环--内部会自动更新计数器(类似while循环里面的 i += 1)-CSDN博客
Python--列表及其应用场景---增、删、改、查。-CSDN博客
list1 = [] # 编写for循环 for i in range(0, 10): list1.append(i) print(list1)
思考:
我们能不能把以上代码简化为一行代码搞定这个程序呢?
-------------------使用 推导式
列表 推导式
基本语法:
叫表达式,是因为黄色背景,返回的数据,给表达式,每循环一次,就给表达式一次数据。
有的时候,表达式,可能不单是下面案例中,只要i, 有可能是i % 4 取余,i **2 取平方,所以叫表达式,而不叫变量
Python算术运算符:加减乘除 整除// 取余(取模)% 幂指数** 小括号-CSDN博客
变量名 = [表达式 for 变量 in 列表 for 变量 in 列表] # 黄色背景色的,是一个部分
变量名 = [表达式 for 变量 in 列表 if 条件] # 黄色背景色的,是一个部分
案例:定义0-9之间的列表
list1 = [] for i in range(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]
列表 推导式 + if条件判断
使用列表推导式时候,除了可以使用for循环,还可以在其遍历的过程中,引入if条件判断。
基本语法:
叫表达式,是因为黄色背景,返回的数据,给表达式,每循环一次,就给表达式一次数据。
有的时候,表达式,可能不单是下面案例中,只要i, 有可能是i % 取余,i **2 取平方,所以叫表达式,而不叫变量
Python算术运算符:加减乘除 整除// 取余(取模)% 幂指数** 小括号-CSDN博客
变量 = [表达式 for 临时变量 in 序列 if 条件判断] 等价于 for 临时变量 in 序列: if 条件判断
随机案例:生成0-9之间的偶数(i%2 == 0)序列
list1 = [i for i in range(10) if i % 2 == 0] # if 条件判断 print(list1)
随机案例:生成0-100之间的偶数(i%2 == 0)的平方 序列
list1 = [i ** 2 for i in range(101) if i % 2 == 0] # if 条件判断 print(list1)
for循环 嵌套 列表 推导式
for循环嵌套基本语法:
for 临时变量 in range(n): for 临时变量 in range(n):
for循环嵌套 列表推导式 基本语法:
变量 = [表达式 for 临时变量 in 序列 for 临时变量 in 序列] # 蓝色背景是外层,黄色背景是内层
随机案例: 创建列表 => [(1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
思考:
先看整体,要的是列表,[ ] 先创建一个空列表。
有小括号,就是元组,元组里数字都是已知固定的,那么就看这些元组中数字的规律。
找规律
1, 0
1, 1
1, 2 # 这三行,左边都是1 右边是0到2,就是一个范围,ok,可以试试用range
2, 0
2, 1
2, 2 # 这三行,左边都是2 右边是0到2,就是一个范围,ok,可以试试用range
按照原先的for循环,先外层,取左边的 1 2,也就是range(1, 3)。
再取内层的值0 1 2 ,也就是range(0, 3) 。
最后,把取到的元组的两个值,依次追加到元组里面,再把这些元组追加到列表里。
相关链接:
Python-----for循环基本语法及其应用---对序列进行遍历循环--内部会自动更新计数器(类似while循环里面的 i += 1)-CSDN博客
Python--列表及其应用场景---增、删、改、查。-CSDN博客
可以写出下面代码:
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)
在不太熟悉推导式时候,可以先思考下,把自己之前掌握的,全部罗列出来,想想需求涉及哪些语法,怎么结合以往的知识点解决问题。孰能生巧,心平气和慢慢来,不是谁上来都可以直接一次搞定的。之后再慢慢进行转换为 推导式。不用害怕试错。