又称解析式,是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.小结:
推导式的使用场景:
- 构建有规律的数据序列时
- 不建议三层及以上循环时使用
- 缺点:不方便调试