生成器表达式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之生成器表达式相关推荐

  1. python基础-生成器表达式

    生成器表达式是一个对象,它执行的计算和列表包含相同,但会迭代地生成结果.语法也和列表包含相同,但要用圆括号代替方括号. (expression for item1 in iterable1 if co ...

  2. python生成表达式_说说 Python 的生成器表达式

    列表推导与生成器表达式都可以用于初始化元组.数组或其他类型的序列.但列表推导需要先建立一个完整的列表,然后再把这 个列表传递到某个构造函数.而生成器表达式会逐个产出元素,这样显然能够节省内存. 列表推 ...

  3. Python进阶3——列表解析式和生成器表达式

    列表解析式相比循环更加简介易读 abc='abcdef' codes1=[] for code in abc:codes1.append(ord(code))#返回字符对应的十进制数.codes2=[ ...

  4. Python 进阶_生成器 生成器表达式

    目录 目录 相关知识点 生成器 生成器 fab 的执行过程 生成器和迭代器的区别 生成器的优势 加强的生成器特性 生成器表达式 生成器表达式样例 小结 相关知识点 Python 进阶_迭代器 & ...

  5. python迭代器和生成器(3元运算,列表生成式,生成器表达式,生成器函数)

    1.1迭代器 什么是迭代器: 迭代器是一个可以记住遍历的位置对象 迭代器对象从集合的第一个元素元素开始访问,直到所有元素被访问完结束,迭代器只能往前不会后退. 迭代器有两个基本方法:iter ,nex ...

  6. python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    一.三元表达式 语法:[成立1 if condition1 else成立2 if condition2 else ...if 成立N conditionN else 不成立] sex = 'man' ...

  7. python 生成器表达式(构建器表达式)

    生成器函数可以简化迭代器的创建.在迭代器的基础上,只要在函数中使用 yield 语句来替代结果的输出,就变成了一个生成器函数. 生成器函数与普通函数最显著的不同就是它没有 return 语句,取而代之 ...

  8. Python入门 推导式 ! 解释:生成器表达式和列表推导式的区别

    Python 入门之 推导式 学习python中有什么不懂的地方,小编这里推荐加小编的python学习群:895,817, 687 有任何不懂的都可以在里面交流,还有很好的视频教程pdf学习资料,大家 ...

  9. python关键字列表的表达式,python 列表推导和生成器表达式的使用

    序列 序列是指一组数据,按存放类型分为容器序列与扁平序列,按能否被修改分为不可变序列与可变序列. 容器序列与扁平序列 容器序列存放的是对象的引用,包括list.tuple.collections.de ...

最新文章

  1. 绿联 蓝牙适配器 linux,绿联蓝牙适配器
  2. Android及java中list循环添加时覆盖的问题-20171021
  3. html中name和id的区别 [ZT]
  4. oracle走当前时间分区,Oracle分区使用波斯日历的时间间隔
  5. java swing 串口_ComTest 接收串口数据,并显示在文本框内,通过JavaSwing实现 Develop 265万源代码下载- www.pudn.com...
  6. 这个数据仓库,竟然把淘宝和京东干翻了。。
  7. HIVE: hive.error.on.empty.partition
  8. java 返回语句_Java:“缺少返回语句”
  9. python自学行吗-自学入门Python能学会吗?
  10. 决策树(十二)--XGBoost
  11. mysql 各种字段取值范围 2009-12-23
  12. 下载《阿里巴巴Java开发手册(详尽版)1.4.0》 与 码出高效,码出质量
  13. er studio mysql_解决ER\Studio无法生成mysql列注释问题
  14. 杂记-----------
  15. 召回率(Recall)
  16. 想要通过炒币财富自由?先看看这篇文章吧!
  17. 由学生学号查询该学生对应的课表--查询函数
  18. 如何构建用户满意的“服务化”数据平台
  19. 微信小程序引入iconfont单色图标实例
  20. 直播平台必备-百度音视频直播 LSS

热门文章

  1. 第十章:使用MapKit开发地图服务
  2. linux终端任务中止,[mcj]利用screen解决ssh连接shell终端断开之后任务终止的问题
  3. java saxon,Saxon in Java:指定SAX Parser
  4. Python代码学习之给图片添加文字或图片水印
  5. CT一般扫描参数_CT胶片上哪些参数和剂量有关?
  6. 基于粒子群优化算法的配电网光伏储能双层优化配置模型[IEEE33节点](选址定容)(Matlab代码实现)
  7. python 学习笔记1-学习路线
  8. 码上日志_19_08
  9. TOTOLink T6路由器漏洞复现
  10. 交互式(无精美UI)房贷计算器上线啦啦啦啊啦啦啦。。。