python中的推导式
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 = 50
k = 0
for 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 += 1
else:
pass
print(' ')
运行代码打印成金字塔的形状如下:
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-
- EasyWeChat初体验
- 过程化SQL、存储过程、自定义函数
- mybatis 的一些常用功能
- 常用但容易忘记的sql语句(sql server为主)
- 利用java的接口实现回调
- java的静态属性,静态块,构造函数的执行顺序
- bootstrap validator 使用示例
- 如何通过jq和php实现返回父级页面(附带记忆功能)
- springmvc下载文件
- PHP获取URL地址的一些坑
- 使用ResourceBundle读取配置文件
- 关于exp statistics的问题和简单测试(82天)
- laravel访问路由在nginx服务器上无法处理
- How Tomcat Works, A Guide to Developing Your Own Java Servlet Container
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python爬取NBA虎扑球员数据
- 发现一个好看的手机壁纸网站,撸代码的手已经饥渴难耐了
- 手把手用python教你拿即时的卫星影像装饰你的桌面
- PyCharm2019亲测破解方式
- :: 是什么语法?
- 支付宝二面:Mybatis接口Mapper内的方法为啥不能重载吗?我直接懵逼了...
- Windows系统中使用Linux命令(可以批量下载Modis数据)
- Python制作桑基图(我承认我低估了这个教程)
- 几个好看的Seaborn图样~(虽然官方配色一般般,但我还是忍不住夸它)
- GDAL读取MAIAC的HDF文件(熟肉)
- Google Earth Engine(GEE)-谷歌地球引擎的大致Python入门
- 谷歌地球引擎(Google Earth Engine)之数据初探(栅格和矢量)
- Python-gdal离线文档下载
- 利用python把shp文件写入PostgresSQL数据库
- python调用cmd运行GDAL报错解决:ERROR 1: PROJ