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

    一句话概念

    列表生成式——可以直接在列表里进行运算

    生成器——一边循环一边计算的机制,称为生成器:generator(就是生成一个不运行的函数或者列表,即数据流)

    第二句:生成器与列表的区别——生成器你不知道长度,就是一个数据流;list、dict、str你知道长度

    迭代器——可以被next()函数调用并不断返回下一个值的对象称为迭代器

    第二句:可迭代对象——可以直接作用于for循环的对象统称为可迭代对象:Iterable

    第三句:生成器一定是迭代器,迭代器不一定是生成器

    列表生成式

    data = [1,2,2,34]
    
    data = [i*2 for i in  data]     #直接运算
    
    data = [i*2 if i>3 else i-1 for i in data ]     #三元运算
    print(data)

    生成器

    第一种方法,列表推到式
    data = (x for x in range(10))       #用小括号表示
    print(data) #此时只打印函数内存,
    第二种复杂式方式
    #斐波那契数列
    
    def fob(num):
        a,b = 0,1
        count = 0
        while count < num:
            count += 1
            tmp = b     #也可以写成a,b=b,a+b
            b = a + b
            a = tmp
            yield a     #返回a, 同时挂起当前这个函数, a返回给了通过__next__()调用当前函数的人
            # return a
        else:print("done")
    
    f = fob(1000000)
    
    for i in range(10):
        print(f.__next__())
    

      

    迭代器

    >>> from collections import Iterator
    >>> isinstance((x for x in range(10)), Iterator)
    True
    >>> isinstance([], Iterator)
    False
    >>> isinstance({}, Iterator)
    False
    >>> isinstance('abc', Iterator)
    False
    

      

    #list、dict、str虽然是Iterable,却不是Iterator。通过iter()函数,可以把list、dict、str等Iterable变成Iterator使用
    >>> isinstance(iter([]), Iterator)
    True
    >>> isinstance(iter('abc'), Iterator)
    True
    

      




  • 相关阅读:
    webstock学习
    H5存储
    js保留两位小数
    html5拖动滑块
    js判断网页访问设备类型
    关于hadoop setCombinerClass 与 setReducerClass同时使用存在的问题。
    hadoop 输出中文乱码问题
    mapreduce实现学生平均成绩
    mapreduce 实现数子排序
    hadoop mapreduce实现数据去重
  • 原文地址:https://www.cnblogs.com/fengdao/p/6057537.html
Copyright © 2011-2022 走看看