zoukankan      html  css  js  c++  java
  • python学习笔记 day14 生成器表达式

    列表推导式

    之前生成一个满足条件的列表我们可以使用for循环,然后往列表中append元素,现在可以不用那么麻烦,直接一个表达式就可以搞定:

    L=['你好哇%d'% i for i in range(10)]
    print(L)

    规则就是: for 是控制循环变量的,前面写上你要生成的这个列表的组成元素(就是后面的循环变量的某种组合形式)

    运行结果:

    再比如你要生成一个0-9范围内 每个数字立方的列表,就可以这样写:

    L=[i**3 for i in range(10)]
    print(L)

    运行结果:

    生成器表达式

    前面之所以先介绍列表推到式,就是因为生成器表达式跟它真的太像了!我们先来感受一下:

    g=(i for i in range(5))
    print(g)   # g是一个生成器
    # for i in g:   #可以使用for循环一次来打印出该生成器内的值
    #     print(i)
    print(g.__next__())  #当然也可以使用g.__next__()方法一个一个打印该生成器内的值~
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())

    运行结果:

    如果想要使用生成器表达式得到一个生成器,要去里面的元素是0-9数字的平方:

    g=(i**2 for i in range(10))
    print(g)                 #生成器表达式得到的是一个生成器
    # for i in g:            #可以使用for循环来获取生成器内的值
    #     print(i)
    print(g.__next__())      #也可以使用.__next__()方法来获取
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())
    print(g.__next__())

    运行结果:

    对比可以发下,生成器表达式和列表推导式的区别为:

    1. 形式不同,列表推导式最外层采用的是 [] -中括号,而生成器表达式采用的是()---圆括号;

    2. 两者的返回值不同,列表推导式返回的是一个list,而生成器表达式返回的是一个生成器,所以列表推导式一次性返回这个列表(包含列表的所有值),而生成器只有当调用__next__()方法时才会得到值,所以更节省内存空间;

    talk is cheap,show me the code
  • 相关阅读:
    三大流程控制:1、if判断语句 2、while循环语句 3、for循环语句
    变量剩余的部分,然后是基本数据类型、输入输出和基本运算符
    1.操作系统、2.编程语言分类、3.变量、4.运行python文件的三个阶段
    数据库4 待修
    电脑组合键
    redis 基础应用
    数据库3 待改
    数据库2 待修
    mysql 数据库基础篇
    socketserver 和 事件Event
  • 原文地址:https://www.cnblogs.com/xuanxuanlove/p/9591402.html
Copyright © 2011-2022 走看看