Python推导式

又称解析式,是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.小结:

推导式的使用场景:

  1. 构建有规律的数据序列时
  2. 不建议三层及以上循环时使用
  3. 缺点:不方便调试
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡拉比丘流形

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值