• 生成器,迭代器,列表推导式


    列表推导式

    迭代器和生成器

    可迭代对象:
    内部含有__iter__方法的就是可迭代对象.
    可迭代对象不能取值,因为内部不含有__next__方法.
    可迭代对象==>迭代器
    obj. __iter__()
    iter(obj)
    迭代器:
      内部含有__iter__,__naxt__方法的对象.
    迭代器:
      1.节省内存.
      2.惰性机制.
      3.单向,不可逆.
    如何判断可迭代对象,迭代器.
      __iter__ in dir(obj)
    生成器:
    自己用python代码写得迭代器就是生成器
    生成器的本身就是迭代器
    
    
    可迭代对象:str,list,dict,tuple,set,range
    文件句柄:是迭代器
    # l1 = []
    # for i in range(1,14):
    # l1.append(i)
    # print(l1)

    下面是经过列表推导式推导出来的代码,看到没有,只需要简短的一句话就可是实现几行代码的功能,但是需要注意的一点是,当思维达不到或者思路不够的时候不建议这么用,
    会害了你自己,还有当for在一行代码里出现三次的时候就不要继续用这个了,当然你要是能实现功能的话那都好说,就是怕把自己到时候坑了

    # l3 = [i for i in range(1,14)]
    # print(l3)

    列表推导式

    优点:
      1.节省代码,一行搞定
      2.看着高大上
    缺点:
      不好排错
    整体:
      凡是用列表推导式构造的列表对象,用其他方法都可以构建,非常复杂的列表,列表推导式构建不出来
      列表推导式比较有魔性
    [变量(加工后的变量) for 变量 in iterable]    循环模式
    [变量(加工后的变量) for 变量 in iterable if 条件] 筛选模式

    '''
    多写几个例子练习一下
    l5 = [i for i in range(1,31) if i % 3 == 0]
    print(l5)
    print([i**2 for i in range(11)])    #10以内能被3整除的数的平方
    print([i**2 for i in range(31) if i % 2 == 1])  #30以内能被3整除的数的平方
    print([i for i in range(1,101,2)])  #100以内所有的奇数
    print([i for i in range(101) if i % 2 == 1])
    li = ['python %s 期'% i for i in range(1,14)]
    print(li)
    names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'],
    ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']]
    l6 = [name for i in names for name in i if name.count('e') == 2]
    l7 = []
    for i in names:
    for name in i:
    if name.count('e') == 2:
    l7.append(name)
    print(l7)
    print(l6)
    mcase = {'a':10,'b':34}
    print({mcase[i]:i for i in mcase})

    '''



  • 相关阅读:
    问题:android学习内容破碎,我个人关于如何学习android的一些个人经历
    问题:一球从某高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?
    问题:alias设置与删除
    问题:从键盘读取特定类型的数据(使用Scanner读取int类型)
    求一个数组当中最大(最小)值的两种计算方法
    Mysql5.7安装
    maven下载及安装
    Ubuntu下修改DNS重启也能用的方法
    删除CNNIC证书
    字符编码ASCII, Unicode和UTF-8概念扫盲
  • 原文地址:https://www.cnblogs.com/ALADL/p/9203945.html
Copyright © 2020-2023  润新知