Python之生成器表达式
生成器表达式Generator expression
语法
(返回值 for元素 in可迭代对象 if条件)
返回一个生成器
和列表解析式的区别
生成器表达式是按需计算(称惰性求值、延迟计算),需要的时候才计算值
列表解析式是立即返回值
生成器
可迭代对象(可迭代对象未必是迭代器,但是迭代器一定是可迭代对象)
迭代器
只有迭代器可以用next,用iter可以将一个可迭代对象转换成迭代器
a = (i for i in range(10))
next(a)
1
--------------------------------------------
next(range(1,3))
'range' object is not an iterator
生成器表达式
举例:
g=("{:04}".format(i)for i in range(1,11))next(g)for x in g:print(x)print('~~~~~~~~')for x in g:print(x)00020003000400050006000700080009
总结:
延迟计算
返回迭代器,可以迭代
从前到后走完一遍后,不能回头
对比列表:
举例:
g=["{:04}".format(i)for i in range(1,11)]for x in g:print(x)print('~~~~~~~~')for x in g:print(x)0001000200030004000500060007000800090010~~~~~~~~0001000200030004000500060007000800090010
总结:
立即计算
返回的不是迭代器,返回可迭代对象列表
从前到后走完一遍后,可以重新回头迭代
和列表解析式的对比:
计算方式
生成器表达式延迟计算,列表解析式立即计算
内存占用
单从返回值本身来说,乘乘其表达式省内存,列表解析式返回新的列表
生成器没有数据,内存占用极少,但是使用的时候,虽然一个个返回数据,但是合起来占用的内存也差不多
列表解析式构造新的列表需要占用内存
计算速度
单看计算时间看,生成器表达式耗时非常短,列表解析式耗时长
但是生成器本身并没有返回任何值,只返回了一个生成器对象
列表解析式构造并返回一个新的列表
集合解析式:
语法
{返回值for元素in可迭代对象if条件}
列表解析式的中括号换成大括号{}就行了
立即返回一个集合
用法
{(x,x+1)for x in range(10)}
{[x]for x in range(10)} #报错,因为[]是列表,{}而这个是集合,里面不能出现不可以哈希的元素
字典解析式:
语法
{返回值for元素in可迭代对象if条件}
列表解析式的中括号换成大括号{}就行了
使用key:value形式
立即返回一个字典
用法
{x:(x+1) for x in range(10)}
{0: 1, 1: 2, 2: 3, 3: 4, 4: 5, 5: 6, 6: 7, 7: 8, 8: 9, 9: 10}{x:[x,x+1] for x in range(10)}
{0: [0, 1],1: [1, 2],2: [2, 3],3: [3, 4],4: [4, 5],5: [5, 6],6: [6, 7],7: [7, 8],8: [8, 9],9: [9, 10]}{(x,):[x,x+1] for x in range(10)}
{(0,): [0, 1],(1,): [1, 2],(2,): [2, 3],(3,): [3, 4],(4,): [4, 5],(5,): [5, 6],(6,): [6, 7],(7,): [7, 8],(8,): [8, 9],(9,): [9, 10]}{[x]:[x,x+1] for x in range(10)}#{chr(0x41+x):x**2 for x in range(10)}
{'A': 0,'B': 1,'C': 4,'D': 9,'E': 16,'F': 25,'G': 36,'H': 49,'I': 64,'J': 81}{str(x):y for x in range(3) for y in range(4)}#输出多少个元素?
{'0': 3, '1': 3, '2': 3}
字典起到去重作用
用法
{str(x):y for x in range(3) for y in range(4)}
等价于
ret={}
for x in range(3):
for y in range(4):
ret[str(x)]=y
总结:
python2引入列表解析式
python2.4引入生成器表达式
python3引入集合、字典解析式,并迁移到了2.7
Python之生成器表达式相关推荐
- python基础-生成器表达式
生成器表达式是一个对象,它执行的计算和列表包含相同,但会迭代地生成结果.语法也和列表包含相同,但要用圆括号代替方括号. (expression for item1 in iterable1 if co ...
- python生成表达式_说说 Python 的生成器表达式
列表推导与生成器表达式都可以用于初始化元组.数组或其他类型的序列.但列表推导需要先建立一个完整的列表,然后再把这 个列表传递到某个构造函数.而生成器表达式会逐个产出元素,这样显然能够节省内存. 列表推 ...
- Python进阶3——列表解析式和生成器表达式
列表解析式相比循环更加简介易读 abc='abcdef' codes1=[] for code in abc:codes1.append(ord(code))#返回字符对应的十进制数.codes2=[ ...
- Python 进阶_生成器 生成器表达式
目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & ...
- python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)
1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...
- python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
一.三元表达式 语法:[成立1 if condition1 else成立2 if condition2 else ...if 成立N conditionN else 不成立] sex = 'man' ...
- python 生成器表达式(构建器表达式)
生成器函数可以简化迭代器的创建.在迭代器的基础上,只要在函数中使用 yield 语句来替代结果的输出,就变成了一个生成器函数. 生成器函数与普通函数最显著的不同就是它没有 return 语句,取而代之 ...
- Python入门 推导式 ! 解释:生成器表达式和列表推导式的区别
Python 入门之 推导式 学习python中有什么不懂的地方,小编这里推荐加小编的python学习群:895,817, 687 有任何不懂的都可以在里面交流,还有很好的视频教程pdf学习资料,大家 ...
- python关键字列表的表达式,python 列表推导和生成器表达式的使用
序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列. 容器序列与扁平序列 容器序列存放的是对象的引用,包括list.tuple.collections.de ...
最新文章
- 绿联 蓝牙适配器 linux,绿联蓝牙适配器
- Android及java中list循环添加时覆盖的问题-20171021
- html中name和id的区别 [ZT]
- oracle走当前时间分区,Oracle分区使用波斯日历的时间间隔
- java swing 串口_ComTest 接收串口数据,并显示在文本框内,通过JavaSwing实现 Develop 265万源代码下载- www.pudn.com...
- 这个数据仓库,竟然把淘宝和京东干翻了。。
- HIVE: hive.error.on.empty.partition
- java 返回语句_Java:“缺少返回语句”
- python自学行吗-自学入门Python能学会吗?
- 决策树(十二)--XGBoost
- mysql 各种字段取值范围 2009-12-23
- 下载《阿里巴巴Java开发手册(详尽版)1.4.0》 与 码出高效,码出质量
- er studio mysql_解决ER\Studio无法生成mysql列注释问题
- 杂记-----------
- 召回率(Recall)
- 想要通过炒币财富自由?先看看这篇文章吧!
- 由学生学号查询该学生对应的课表--查询函数
- 如何构建用户满意的“服务化”数据平台
- 微信小程序引入iconfont单色图标实例
- 直播平台必备-百度音视频直播 LSS
热门文章
- 第十章:使用MapKit开发地图服务
- linux终端任务中止,[mcj]利用screen解决ssh连接shell终端断开之后任务终止的问题
- java saxon,Saxon in Java:指定SAX Parser
- Python代码学习之给图片添加文字或图片水印
- CT一般扫描参数_CT胶片上哪些参数和剂量有关?
- 基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
- python 学习笔记1-学习路线
- 码上日志_19_08
- TOTOLink T6路由器漏洞复现
- 交互式(无精美UI)房贷计算器上线啦啦啦啊啦啦啦。。。