zoukankan      html  css  js  c++  java
  • python 列表解析

    为什么:

    1. 代码精简,易维护
    2. 比普通的循环效率更高,但对大数据列表解析不适合,可能会暂用大量内存,导致MemoryError

    是什么:

    语法: [expr for iter_item in iterable if cond_expr]

    >>>a = [' Are', 'you', 'Ok?', 1, 2]

    >>> [x for x in a if isinstance(x,int)]

    [1, 2]

    支持多重嵌套:

    >>> a=[['i','am'],['wxl','!']]

    >>> [[x.upper() for x in item] for item in a]

    [['I', 'AM'], ['WXL', '!']]

    多重迭代:

    >>> a

    [1, 2, 3, 4]

    >>> b

    [3, 5]

    >>> [ m+n for m in a for n in b if m == n ]

    [6]

    表达式(expr)可以是简单的或者复杂的表达式,甚至是函数

    1. >>> def f(v):

       ... return '+' if v>0 else '-'

      >>> [f(v) for v in [-1,0,1,2] ]

      ['-', '-', '+', '+']

     2.  >>> ['+' if v>0 else '-' for v in [-1,0,1,2] ]

       ['-', '-', '+', '+']

    iterable可以时任意的可迭代对象:

    >>> f=open("test")

    >>> [i.strip() for i in f]

    ['I', 'am', 'wxl']

    生成器表达式:(expr for iter_item in iterable if cond_expr)

    生成器的使用场景:序列过长, 而每次只需要获取一个元素时

    A generator object in python is something like a lazy list. The elements are only evaluated as soon as you iterate over them

    有些像惰性的列表,只有当需要的时候才会生成

    >>> a=[1,2,3,4]

    >>> (i, for i in a if i>2)                #只是生成迭代器 next可访问

    当函数接收可迭代对象参数时,可以使用生成器简写

    >>> def f(a):

    ... for i in a:

    ... print i

    >>> f((1,))            #注意元组(1,)不是(1),否则报错'int' object is not iterable

    1

    >>> p=open("test")

    >>> f(p)

    I

    am

    wxl

    >>> f(i for i in range(3) if i%2 == 0)

    0

    2

  • 相关阅读:
    多线程 NSThread GCD
    UICollectionView 集合视图用法,自定义Cell
    简单的注册 登录
    数据库sqlite的使用
    沙盒机制 归档 反归档
    图片异步加载 ,KVO
    iOS开发系列--通知与消息机制
    制作iOS Ad-Hoc测试应用
    NT_iOS笔记—判断iPhone6
    iOS开发多线程篇—单例模式(ARC)
  • 原文地址:https://www.cnblogs.com/wxl-dede/p/4990904.html
Copyright © 2011-2022 走看看