python中的推导式_python中的推导式

本文介绍了Python中推导式的使用,包括生成勾股数列表、心形图案和乘法口诀表。详细讲解了列表推导式、字典推导式和集合推导式的语法和实例,帮助理解其工作原理。
摘要由CSDN通过智能技术生成

1. 首先看下运用推导式可以生成哪些有趣的代码

1.1  生成包含100以内所有勾股数(i,j,k)的列表

w = [(i,j,k) for i in range(1, 100) for j in range(1, 100) for k in range(1,100) if k**2 == i**2 + j**2]#把前21组勾股定理打印成金字塔的代码max_level = 50k = 0for now_level in range(1,max_level+1):for i in range(max_level-now_level):print(' ',end=' ')for j in range(now_level-10):if k <=20:print(w[k],end=' ')k += 1else:passprint(' ')

运行代码打印成金字塔的形状如下:

1.2  用推导式生成表白妈妈(mama)和爸爸(baba)的心形图案

print('\n'.join([''.join([('mam'[(x-y)%2]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ')for x in range(-30,30)])for y in range(15,-15,-1)]))print('\n'.join([''.join([('bab'[(x-y)%2]if((x*0.05)**2+(y*0.1)**2-1)**3-(x*0.05)**2*(y*0.1)**3<=0 else' ')for x in range(-30,30)])for y in range(15,-15,-1)]))

运行代码得到的结果:

1.3 用推导式生成乘法口诀表

print('\n'.join([' '.join(['%s*%s=%-2s' % (y,x,x*y) for y in range(1,x+1)]) for x in range(1,10)]))

运行代码得到的结果:

2. 接下来看下python中三种类型的推导式

2.1 列表推导式

[ for in if ]

例子:[i*4 for i in range(10) if i>3]

结果:[16, 20, 24, 28, 32, 36]

代码解析:

首先看 for i in range(10):当 i 依次取 range(10)  (0,1,2,3,4,5,6,7,8,9)时

接着看 if i>3 :  当 i 大于3时

最后看 i*4:  得到结果 i*4  的一个列表

可以自己试下下面这个两个例子,加深印象

[x*x for x in range(10) if x%2==0][x.upper() for x in [1, 'abc', 'xyz', True] if isinstance(x, str)]

2.2 字典推导式

{: for in if }

例子:{ 'k%d' %(x) : x**3 for x in range(10) }

结果:{'k0': 0,'k1': 1,'k2': 8,'k3': 27,'k4': 64,'k5': 125,'k6': 216,'k7': 343,'k8': 512,'k9': 729}

代码解析:

首先看 for x in range(10):   当 x 依次取 range(10)  (0,1,2,3,4,5,6,7,8,9) 时

接着看 k%d :  k 为固定值,%d 依次取x的值

最后看 %(x):  依次填充 x**3 的结果到 %(x) 中

可以自己试下下面这个两个例子,加深印象

{ 'k%d' %(x) : x**2 for x in range(3, 10) }{ 'k%d' %(x) : x**2 for x in range(10) if x>5 }

2.3 集合推导式

{ for in if }

例子1:{x*x for x in range(-3,3)}

结果1:{0, 1, 4, 9}

代码解析:

首先看 for x in range(-3,3):   当 x 依次取 range(10)  (-3,-2,-1,0,1,2) 时

接着看 x*x :  即集合中的原素依次为(9,4,1,0,1,4)

最后由高中所学集合的特性(非重复),可以得到最后结果

例子2:{x+y for x in range(5) for y in range(x)}

结果2:{1, 2, 3, 4, 5, 6, 7}

代码解析:

首先看 for x in range(-3,3):   当 x 依次取 range(10)  (-3,-2,-1,0,1,2) 时

接着看 x*x :  即集合中的原素依次为(9,4,1,0,1,4)

最后由高中所学集合的特性(非重复),可以得到最后结果

可以自己试下下面这个两个例子,加深印象

{x+y for x in range(-1,5) for y in range(x)}{x*x for x in range(10) if x%2==0}

本文是本人使用集合推导式后的一些见解,如有不当之处恳请指正。

参考文献:

1.https://blog.csdn.net/xiuxiu179/article/details/82969267

-end-

最后附上我的联系方式:手机号、微信号(13162366985)

也可以添加qq群:阿黎逸阳交流群

有问题欢迎咨询\(^o^)/~

喜欢这篇文章

就请点个 “在看” 吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值