zoukankan      html  css  js  c++  java
  • python中的迭代器

    可迭代对象

    • 可通过for…in 进行遍历的数据类型包括 list,tuple, dict, set, str;以及生成器generator,及带yield的生成器函数
    • 这些可直接作用于for循环的对象统称为可迭代对象:Iterable
    from collections import Iterable
    >>>isinstance('abc',Iterable)
    >>>True
    >>>isinstance((x for x in range(10)),Iterable)
    >>>True
    >>>isinstance(100,Iterable)
    >>>False
    

    迭代器

    • Iterator,无限大数据流,内部定义__next__( )方法,返回下一个值的对象
    • 生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator

    返回迭代器对象

    mylist=[1,2,3,4,5]
    it=iter(mylist)
    >>>next(it)
    >>>1
    >>>next(it)
    >>>2
    >>>it.__next__()
    >>>3
    >>>it.__next__()
    >>>4
    >>>next(it)
    >>>5
    

    两种方式等效,访问下一个元素

    1. 通过 it.next()
    2. next(it)

    创建一个迭代器

    class Fibs:
        def __init__(self):
            self.a=0
            self.b=1
        def __next__(self):
            self.a,self.b=self.b,self.a+self.b
            return self.a
        def __iter__(self):
            return self
            
    
    • 实现__iter__和__next__方法可自定义迭代器类
    • 实现__next__方法,可访问迭代器中的元素

    生成器VS迭代器

    • 生成器:一种特殊的迭代器,只能被遍历一次,生成器表达式,生成器函数(yield)创建生成器
    • 迭代器:无限大数据流(容器),可通过实现__iter__( )和__next__( )方法,自定义迭代器类,注意与Iterable可迭代对象区别
  • 相关阅读:
    P4855 MloVtry的idea
    CF343D Water Tree
    CF165D Beard Graph
    P3833 [SHOI2012]魔法树
    P2410 [SDOI2009]最优图像 ZKW最大费用最大流
    P2157 [SDOI2009]学校食堂
    P2407 [SDOI2009]地图复原
    P4008 [NOI2003]文本编辑器
    awk里面执行shell命令
    git 系统中 post-receive 钩子不能正常执行 git pull 解决方法
  • 原文地址:https://www.cnblogs.com/mengxiaoleng/p/11567633.html
Copyright © 2011-2022 走看看