又称解析式,是Python的一种独有特性。
文章目录
1.基本概念
- 概念:推导式是可以从一个数据序列构建另一个新的数据序列的方式。
 - 作用:简化代码
 - 分类:
 
列 表 推 导 式 字 典 推 导 式 集 合 推 导 式 \begin{aligned} 列表推导式 \\ 字典推导式 \\ 集合推导式 \end{aligned} 列表推导式字典推导式集合推导式
2.列表推导式
2.1循环模式
通过for循环来配合表达式或函数,生成列表(序列)。
 语法:[变量表达式 或 有返回值的函数 for 变量 in iterable]
 练习:生成一个列表,包含1至10的平方
 传统写法:
res = [] 
for i in range(1,11): 	
	res.append(i * i) 
	print(res) 
	#输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
 
推导式写法1:应用“变量表达式”
res = [i * i for i in range(1,11) ] 
# i * i 是变量表达式,i的值依次从后面的循 环中取出 
print(res) 
#输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
 
推导式写法2:应用“内置函数”
res = [pow(i,2) for i in range(1,11) ] #pow(x,y)是内置函数, 表示x的y次幂 
print(res) #输出:[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
 
推导式写法3:应用“自定义函数(需要有返回值)”
def getSquare(x):
    return f"{x}的平方是{x**2}" #自定义函数必须有返回值,返回值会成为列表中的元素
res = [getSquare(i) for i in range(1,11) ]
print(res) #输出:['1的平方是1', '2的平方是4', '3的平方是9', '4的平方 是16', '5的平方是25', '6的平方是36', '7的平方是49', '8的平方是64', '9的平方是81', '10的 平方是100']
 
2.2.筛选模式
在循环生成列表元素的过程中包含条件判断语句。
 语法:[变量表达式 或 有返回值的函数 for 变量 in iterable if 条件表达式]
 练习:30以内被3整除的数字
 传统写法:
res = []
for i in range(1,31):
    if i % 3 == 0:
        res.append(i)
print(res)
#[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
 
推导式写法:
res = [i for i in range(1,31) if i % 3 == 0 ]
print(res)
#[3, 6, 9, 12, 15, 18, 21, 24, 27, 30]
 
2.3.多重循环
应用场景:会用在矩阵计算、结果筛选与匹配等场合
 练习:打印九九表
 传统写法:
for i in range(10):
    for j in range(1,i+1):
        print(f"{i}*{j}={i*j}",end="\t")
    print()
 
推导式写法
def get99(i,j):
    print(f"{i} * {j} = {i * j}", end="\t")
    if i == j:
        print()
        res = [get99(i,j) for i in range(1,10) for j in range(1,i+1)]
 
3. 字典推导式
字典推导式,使用方法和列表推导式基本相同。唯一的区别在于形成的序列是字典,元素的格式是“键值
 对”。
 练习:将下面两个列表中的每个元素一一对应,形成键值对,保存到字典中。
 city = [“北京”,“上海”,“广东”,“四川”], abbr = [“京”,“沪”,“粤”,“川”]
dic = {city[i] : abbr[i] for i in range(len(city))} 
print(dic) #输出:{'北京': '京', '上海': '沪', '广东': '粤', '四川': '川'}
 
4.集合推导式
集合推导式,使用方法和列表推导式基本相同。唯一的区别在于形成的序列是集合。
 练习:使用集合保存100以内所有的偶数。
print({i for i in range(2,101,2)})
 
5.小结:
推导式的使用场景:
- 构建有规律的数据序列时
 - 不建议三层及以上循环时使用
 - 缺点:不方便调试
 










