zoukankan      html  css  js  c++  java
  • 列表/字典/集合解析式和生成器

    列表解析式

    列表解析式是将一个列表(实际上适用于任何 可迭代对象(iterable) )转换成另一个列表的工具。在转换过程中,可以指定元素必须符合一定的条件,才能添加至新的列表中,这样每个元素都可以按需要进行转换。

    a0=dict(zip(('a','b','c'),(1,2,3)))
    a1=range(10)
    a2=[i for i in a1 if i in a0]
    print(a2)

    以上代码打印的是一个空列表

    我们来解释一下代码列表解析式运用的逻辑:

    a0=dict(zip(('a','b','c'),(1,2,3)))
    a1=range(10)
    a2=[]
    for i in a1:
        if i in a0:
            a2.append(i)
    print(a2)

    前面两个创建列表的方法等价,这时你就可以理解了列表解析式的基本运用了

    这时还有一个问题,为什么打印的值为空呢?这是因为 if i in a0这个语句判断的是i是否在字典中,判断的是字典的key值而不是value值,所以不等价返回的是False

    字典解析式

    用于创建一个字典(可加条件语句或嵌套语句)

    A1=range(10)
    A2={i:i*8 for i in A1 if i>5}
    print(A2)
    #{6: 48, 7: 56, 8: 64, 9: 72}

    字典的形式是{key,value},所以这里用的是花括号并传递key和value用冒号隔开

    集合解析式

    用于创建一个集合(可加条件语句或嵌套语句)

    A1=range(10)
    A2={i for i in A1 if i>5}
    print(A2)
    print(type(A2))
    #{8, 9, 6, 7}
    #<class 'set'>

    注意集合的顺序是随机的

     

    生成器

    生成器是可迭代对象,可用list()转换成列表和循环遍历出值

    有两种生成器创建方法:生成器表达式和生成器函数

    生成器表达式

    用于创建一个生成器(可加条件语句或嵌套语句)

    A1=range(10)
    A2=(x*2 for x in A1)
    print(A2)
    #<generator object <genexpr> at 0x007ED090>

    生成器函数

    def gen(n):
        for i in range(n):
            yield i*i
    for item in gen(5):
        print(item)
    # 0
    # 1
    # 4
    # 9
    # 16

    这里用yield返回一个生成器

    yield会一次返回一个结果,然后挂起,下次从挂起处继续执行,这能有效的减少内存损耗

    如果是return就直接退出函数并返回一个值了

  • 相关阅读:
    Office2007界面风格的绿色软件针式个人知识库管理系统[V3.5]
    Mentor工具简介
    Xilinx网站资源导读
    FPGA时钟问题的探讨汇总
    FPGA中竞争冒险问题的研究
    一些IC前端设计工具
    SPI协议简介
    USB接口定义
    TTL与CMOS电平的区别
    Synopsys工具简介
  • 原文地址:https://www.cnblogs.com/luocodes/p/10727019.html
Copyright © 2011-2022 走看看