zoukankan      html  css  js  c++  java
  • list comprehensions

    2011-10-07

    列表解析 python很优雅的东西,今天从cookbook稍微深的理解下它,举例:
    >>> multi = [[0] * 5] * 3
    >>> print multi
    [[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
    >>> multi[0][0] = 'oh shit'
    >>> print multi
    [['oh shit', 0, 0, 0, 0], ['oh shit', 0, 0, 0, 0], ['oh shit', 0, 0, 0, 0]]



    使用 * 运算符获得的列表指向同一个列表对象,oh shit!

    用列表解析看效果:
    multi = [[0]*5 for row in range(3)]
    >>> multi[0][0] = 'oh yeah'
    >>> print multi
    ['oh yeah', 0, 0, 0, 0], [0, 0, 0, 0, 0]], [0, 0, 0, 0, 0]]

    双重列表解析的效率没有 单重的快:
    multilist = [[0 for col in range(5)] for row in range(10)]
    multilist = [[0]*5 for row in range(10)]
    但表达更清晰 更对称

    列表解析常用于更改列表,而不是重新new一个列表
    L[:] = [min(x,100) for x in L] 和 L = [min(x,100) for x in L]
    是不同的 L[:] 更改已存在的 L的元素 而第二种写法
    L = [min(x,100) for x in L] 则是重新绑定一个列表到L


    例子基本取自 cookbook , 猴年马月才能看完它啊。。。。

  • 相关阅读:
    java核心技术学习笔记之一程序设计环境
    java核心技术学习笔记之一程序设计概述
    Eclips入门教程
    strict aliasing
    GCC 内联汇编
    文件系统实现
    ucore lab2
    Vim 最强调试插件:vimspector
    X86保护机制
    ucore lab1
  • 原文地址:https://www.cnblogs.com/shenguanpu/p/2299763.html
Copyright © 2011-2022 走看看