zoukankan      html  css  js  c++  java
  • python-22-生成器表达式和列表等各种推导式

    前言

    我们一般正常使用for循环是这样子的:

    for i in range(10):
        print('表白:%s'% i)

    一、生成器表达式

    1、可以看到我们直接一个for循环可能你直接就拿到了它的全部数据,但是换成生成器表达式它便可以一个一个取值,从而也节约了占用内存空间。

    当然也可以再用for循环一次洗取完值,可以说是非常方便又节约内存。

    # 1、生成器表达式
    g = ('表白:%s' % i for i in range(10))
    print(g)                            # 拿到的是:生成器
    print('我是next:%s' % next(g))      # 可用next一个一个取值,相当于 __next__ 方法。
    print('我是__next__:%s' % g.__next__())
    for i in g:
        print(i)

     2、生活中的例子:我们春节在家里做汤圆,加入面粉足量的情况下,你家里做了100个家人们一起能吃完吗?

    显然是不可能那么快的,那么我们在家里就是这样做:先做20个吃完,再做,吃完再做,是不是很像生成器呢?

    二、列表等各种推导式

    1、列表推导式:

    ret = ['表白:%s' % i for i in range(10)]
    print(ret)

    2、完整推导式,if 判断过滤,类似筛选功能

    # 如1:把 100 以内能被5整除的数
    g = [i for i in range(100) if i % 5 == 0]
    print(g)

     3、多层嵌套的推导式,先for外面层次,一层一层for。

    names = [['xiag', 'ee', 'asde', 'asde'],
         ['mina', 'andy', 'asdee', 'jenkinse']]
    ret = [name for lists in names for name in lists if name.count('a') >= 1]
    print(ret)

    三、其他推导式

    1、字典推导式:将 key 和 value 对调,变为{'23': 'a', '55': 'bb'}

    # 将 key 和 value 对调,变为{'23': 'a', '55': 'bb'}
    dic = {'a': '23', 'bb': '55'}
    ret = {dic[i]: i for i in dic}
    print(ret)

     2、集合推导式:自带去重功能,将1和4都是有重复,但打印出来是只有一个1和4;

    # 集合推导式,自带去重功能
    res = {x**2 for x in [1, -1, 2, -2, 3]}
    print(res)

    总结:列表等各种推导式 与 生成器表达式 对比。

    • 1、括号不一样,列表、元组。
    • 2、返回值不一样,表达式几乎不占用内存

    欢迎来大家QQ交流群一起学习:482713805

  • 相关阅读:
    Mac OS X:在VirtualBox中使用Xcode连接IPAD
    Xcode:PhoneGap 2.5.0项目创建方法
    Android:网络操作2.3等低版本正常,4.0(ICS)以上出错,换用AsyncTask异步线程get json
    安卓:WebView中iframe,焦点字段出现两个文本输入框,位置错误
    Mac OS X:Mac系统鼠标滚轮方向调整
    Xcode:missing file xxx
    Mac OS X:Xcode常用快捷键
    分形图形神器XaoS
    [转]How to change Atheros AR9285 MAC addr on Win7(Win7下更改Atheros AR9285 MAC地址)
    利用pscp建立“右键发送到”菜单
  • 原文地址:https://www.cnblogs.com/gsxl/p/12275589.html
Copyright © 2011-2022 走看看