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
    

      




  • 相关阅读:
    Paint类的介绍
    缓存淘汰算法之LRU
    Android SurfaceView实战 打造抽奖转盘
    android中scrollTo和scrollBy的理解
    Android View.onMeasure方法的理解
    Android Context 上下文 你必须知道的一切
    Android Animation简述
    Markdown 语法说明
    理解Java虚拟机体系结构
    Java集合框架:HashMap
  • 原文地址:https://www.cnblogs.com/fengdao/p/6057537.html
Copyright © 2011-2022 走看看