zoukankan      html  css  js  c++  java
  • 列表推导式和生成器

    一.列表推导式

    列表推导是构建列表(list)的快捷方式,而生成器表达式则可以创建其他任何类型的序列,如果你的代码里并不

    经常使用它们,你有可能错过很多可读性很好的而且更高效的代码的机会

    示例1: 把一个字符串变成Unicode码位的列表

     

    示例2:把字符串变成Unicode码位的另外一种写法(列表生成式)

     

    python2.x中,在列表推导中for关键词之后的赋值操作可能会影响列表推导的

    上下文中的同名变量。像下面这个python2.7控制台对话

    如你所见,x原本的值被取代了,但是这种在python3不会出现 

    列表推导,生成器表达式,以及同它们很相似的集合(set)推导和字典(dict)推导,在python3中都有了

    自己的局部作用域,就像函数似的。表达式内部的变量和赋值只在局部作用,

    表达式的上下文里的同名变量还可以被正常引用,局部变量并不会影响到他们。

    这是python3代码:

     

    2.列表推导同filter和map的比较

    filter和map合起来能做的事情,列表推导也可以做,而且还不需要借助难以理解

    和阅读的lambda表达式。

    示例3:用列表推导和map/filter组合来创建同样的表单

     

    3.列表推导生成笛卡尔积

     

    第一种得到的结果是以颜色排列,再以尺码排列,如果想依照尺码后颜色的顺序来排列,

    只需要调整从句的顺序。

     

    .生成器表达式

    虽然也可以用列表推导来初始化元组,数组或其他序列类型,但是生成器表达式式更好的

    选择。这是因为生成器表达式背后遵守了迭代器协议,可以逐个的产出元素,而不是先建

    立一个完整的列表,然后再把这个列表传递到某个构造函数里。前面那种方式显然能够节省内存。

    生成器表达式的语法跟列表推导差不多,只不过把方括号换成圆括号而已。

    示例5:用生成器表达式初始化元组和数组

    ·如果生成器表达式是一个函数调用过程中的唯一参数,那么不需要额外再用括号把它围起来

    ·array的构造方法需要两个参数,因此括号式必须的。array构造方法的第一个参数指定里数组中数字的存储方式

    示例6:使用生成器表达式计算笛卡尔积

    使用生成器,不会一次性生成6个组合的列表,因为生成器在每次for循环运行时才生成一个组合。生成器可以省掉for循环的开销

     

  • 相关阅读:
    对称加密和非对称加密
    SpringMVC 请求调用过程
    Swagger2常用注解和使用方法
    玩转汉诺塔
    java序列化
    判断当前时间是否在某时间段内
    docker限制容器日志大小
    MySQL数据库备份与恢复
    MySQL事物
    MySQL用户
  • 原文地址:https://www.cnblogs.com/benjamin77/p/9998033.html
Copyright © 2011-2022 走看看