zoukankan      html  css  js  c++  java
  • 生成器表达式和各种推导式

    1.生成器表达式

    #生成器表达式(几乎不占内存)
    g=(i for i in range(10))
    print(g)
    #<generator object <genexpr> at 0x0000019DFFFAC408>
    for i in g:
        print(i)

    2.列表推导式

    #列表推导式
    ex_list=['第%s个'%(i+1) for i in range(5)]
    print(ex_list)
    #['第1个', '第2个', '第3个', '第4个', '第5个']
    #相当于
    ex_list=[]
    for i in range(5):
        ex_list.append("第%s个"%(i+1))
    print(ex_list)

    3.列表推导式和生成器表达式的区别

    #列表推导式和生成器表达式的区别
    ret1=(i*2 for i in range(5))
    print(ret1)   #此时拿到一个生成器,内存占用少
    #<generator object <genexpr> at 0x0000019DFFFAC408>
    ret2=[i*2 for i in range(5)]
    print(ret2)
    #[0, 2, 4, 6, 8]

    4.字典推导式

    #将一个字典中key和value的值对调
    dic1={"1":11,"2":12}
    dic1_reverse={dic1[k]:k for k in dic1}
    print(dic1_reverse)
    #11: '1', 12: '2'}
    
    #合并大小写对应的value值,,将k统一成小写
    dic2={"a":10,"b":21,"A":20,"K":44}
    dic2_f={k.lower():dic2.get(k.lower(),0)+dic2.get(k.upper(),0) for k in dic2}
    print(dic2_f)
    #dic2.get('a',0)  获取a的值,如果没有就返回0(不写0就返回None)
    #{'a': 30, 'b': 21, 'k': 44}

    5.集合推导式(自带去重)

    #集合推导式
    #计算列表中每一个值的平方(自带去重)
    squaredx={x**2 for x in [1,-1,2,-2,3,4,7]}
    print(squaredx)
    #{1, 4, 9, 16, 49}

    6.没有元祖推导式

    #没有元祖推导式,因为毕竟还是用小括号,但是可以前面加tuple,强制类型转换
    retx=((i*2 for i in range(5) if i%2==0))
    print(retx)
    #<generator object <genexpr> at 0x000001ADF3FCC5E8>
    #强制类型转换之后就是(0, 4, 8)

    7.其他示例

    #嵌套列表中有'e'的值(复杂,不建议用)
    names=[['google','facebook','youtube','amazon'],['baidu','alibaba','tencent','bilibili']]
    neme=[name for lst in names for name in lst if name.count('e')>=1]
    print(neme)
    #['google', 'facebook', 'youtube', 'tencent']
    #python3可以用中文作为变量名
    示例=(i for i in range(10))
    print(g)
    #<generator object <genexpr> at 0x0000019DFFFAC408>
    for 元素 in 示例:
        print(元素,end="*")
    #0*1*2*3*4*5*6*7*8*9*

    总结:

    语法:
    [每一个元素或者和元素相关的表达式操作 for 元素 in 可迭代类型] #遍历之后挨个处理
    [满足条件的元素相关的操作 for 元素 in 可迭代数据类型if 元素相关的操作] #筛选功能
    #一些笔记:
    生成器和迭代器都是惰性运算(不找它拿值就不工作),生成器中的值取一次就没有了,但是可以有多个生成器
    可迭代对象都有__iter__方法
  • 相关阅读:
    spring整合Quartz
    Quartz基本使用
    hibernate框架基础描述
    POI技术实现对excel的导出
    CG-CTF CRYPTO部分wp
    CG-CTF web部分wp
    快速排序算法的c++实现
    tornado当用户输入的URL无效时转入设定的页面
    sicily 4699. 简单哈希
    unbutu下Io language的解释器安装
  • 原文地址:https://www.cnblogs.com/lowislucifer/p/10994296.html
Copyright © 2011-2022 走看看