• 列表生成式和生成器表达式


    列表生成式

    列表生成式基本形式

    # 列表生成式基本形式
    l = ["egg%i" %i for i in range(50) if i < 26]
    print(l)
    

    列表生成式应用

    # 列表生成式
    # l = ["egg%i" %i for i in range(50) if i < 26]
    # print(l)
    
    # 列表生成式拼接文件名,运行结果
    # ['c:\egon\egeon.txt',
    #  'c:\egon\a\a.txt',
    #  'c:\egon\a\alex.txt',
    #  'c:\egon\a\b\b.txt', 
    #  'c:\egon\a\b\zou.txt', 
    #  'c:\egon\a\b\c\c.txt']
    
    import os
    g = os.walk("c:\egon")
    l = ["%s\%s" % (i[0], j)for i in g for j in i[2]]
    print(l)
    
    # 等价语句
    # l = []
    # for i in g:
    #     for j in i[2]:
    #         info = "%s\%s" % (i[0] , j)
    #         l.append(info)
    # print(l)
    

    列表生成式计算商品价格

    # 列表生成式计算商品价格
    # 在文件b.txt中有如下商品价格
    # apple 10 3
    # tesla 100000 1
    # mac 3000 2
    # lenovo  30000 3
    # chicken 10 3
    # 字符串分割后["apple", 10, 3]
    
    cart = []      # 应付价格列表
    with open("b.txt") as f:
        for line in f:
            info = line.strip().split()
            res = int(info[-1]) * int(info[-2])
            cart.append(res)
    print(cart)          # [30, 100000, 6000, 90000, 30]
    print(sum(cart))     # 196060
    
    
    # 列表生成器
    with open("b.txt") as f:
        cart = [int(line.split()[-1]) * int(line.split()[1]) for line in f]   # 应付价格列表
    print(cart)   # [30, 100000, 6000, 90000, 30]
    print(sum(cart))  # 196060
    

    生成器表达式

    类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

    生成器应用1

    def test():
        for i in range(4):
            yield i
    
    g=test()
    
    g1=(i for i in g)
    g2=(i for i in g1)
    
    print(list(g1))   # [0, 1, 2, 3],执行此步骤时,此时g1生成器指针已经走到最后。下次调用无结果。
    print(list(g2))   # []
    

    总结
    生成器表达式的优点:

    1.生成器的好处是延迟计算,一次返回一个结果。也就是说,它不会一次生成所有的结果,这对于大数据量处理,将会非常有用。

    2.生成器还能有效提高代码可读性
    1.把列表解析的[]换成()得到的就是生成器表达式
    2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存<>br

  • 相关阅读:
    vue参考---自建vue插件
    vue参考---vue指令
    vue参考---vue基本实例
    Install Package and Software
    解决Gradle DSL method not found: ‘android()’
    再见理想
    HttpClientUtil
    AtomicLong
    Fastjson反序列化泛型类型时候的一个问题
    Java获取泛型的Class对象
  • 原文地址:https://www.cnblogs.com/zouruncheng/p/6701187.html
Copyright © 2020-2023  润新知