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

    看到这个标题有没有很邪恶!推导式********************哈哈!我喜欢这个东西

    和列表一样,列表推导式也采用方括号[]表示,并且用到了一个简写版的for循环,第一部分是一个生成结果列表元素的表达式,第二部分是一个输入表达式上的循环。阅读理解列表表达式的推荐做法是先从里面的for循环开始,向右查看是否有if条件,然后将推导式开始的那个表达式映射到每一个匹配的元素上去。

    在这个例子中,我们用到了列表推导式,看起来有没有很叼,一行代码就搞定了

    abc=[x for x in range(10) if x % 2 ==0 if x >5]
    print(abc)
    >>>[6,8]

    如果不用列表推导式的话
    #abc=[]
    #for i in range(10):
    #  if x % 2 == 0:
    #    if x >5:
    #    abc.append(x)
    #print(abc)
    #>>>[6.8]

    有没有很low,就算用and if 也要两行,一个好的程序员能用一行代码能搞定的就不用两行甚至三行来做,所以来吧baby们,推倒吧!


    python还支持另外一种和列表表达式类似的结构,叫做生成器表达式(generator expression),除了它有一种称之为“惰性计算”的特点以外,它和列表推导式的用法基本一致。它的工作方式是每次处理一个对象,而不是一口气处理和构造整个数据结构,这样做的潜在优点是可以节省大量的内存
    下面这个例子和上面有没有很相似呢!那就是用()代替了[],这就变成了生成式了,如果直接print输出,会提示你
    <generator object <genexpr> at 0x033E5120>这段代码,说你输出的东西不是迭代器
    这时候需要内置函数__iter__来搞定转化成迭代器。
    再用__next__函数来输出生成器里的内容。
    也许你觉得麻烦,但是如果你的列表是range(10000000000000)的时候,你还敢直接读进内存么,你要敢这么做,分分钟几十万上下的钱没了!
    这时候就需要用生成器了 ,占内存小!

    abc=(x for x in range(10) if x % 2 ==0 if x >5)
    a=iter(abc)
    print(next(a))
    print(next(a))
    >>>6
    >>>8
  • 相关阅读:
    深拷贝浅拷贝
    计算属性和监听,computed,watch
    字面量的引用与使用
    MYSQL 触发器
    JavaScript寻找对象方式
    JavaScript事件传播
    HTML 绑定事件
    JavaScript 中的 String()方法
    JavScript re模块
    JavScript Math函数的使用方法
  • 原文地址:https://www.cnblogs.com/DE_LIU/p/7274285.html
Copyright © 2011-2022 走看看