zoukankan      html  css  js  c++  java
  • 生成器,迭代器,列表推导式

    列表推导式

    迭代器和生成器

    可迭代对象:
    内部含有__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})

    '''



  • 相关阅读:
    Scrum Meeting Beta
    Scrum Meeting Beta
    Scrum Meeting Beta
    Scrum Meeting Beta
    《人月神话》读后感
    【最后的总结】我们的Sprint3冲刺——闹钟的添加和管理(刘铸辉,何晓楠)
    【软件结课】软件工程课的评价
    【软件结课】软件工程课的收获
    springt2第二次冲刺计划表
    给出一个 m*n 的二维数组(元素可为正可为负),求该二维数组的一个子数组,且此子数组中所有元素的和最大,并输出该数组的和。
  • 原文地址:https://www.cnblogs.com/ALADL/p/9203945.html
Copyright © 2011-2022 走看看