美文网首页
python数据分析基础37-创建迭代器类型

python数据分析基础37-创建迭代器类型

作者: Zhigang_Han | 来源:发表于2020-04-19 20:41 被阅读0次

    1、使用iter(obj, sentinel), 返回一个迭代器, sentinel 可省略(一旦迭代到此元素,立即终止)

    list1=[1,2,3,4,5,6] ####可迭代对象iterable
    for i in list1:
        print(i)
    out:
    1
    2
    3
    4
    5
    6
    t1=iter(list1) ###t1为迭代器iterator
    for i in t1:
        print(i)
    out:
    1
    2
    3
    4
    5
    6
    

    2、这里,我有一个疑问,既然我们可以直接迭代list1,为什么还要创建迭代器t1呢?

    (1)一般情况下不需要将可迭代对象封装为迭代器。但是想象一种需要重复迭代的场景,在一个class中我们需要对输入数组进行正序、反序、正序step=1、正序step=2等等等等的多种重复遍历,那么我们完全可以针对每一种遍历方式写一个迭代容器,这样就不用每次需要遍历时都费劲心思的写一堆对应的for循环代码,只要调用相应名称的迭代器就能做到,针对每一种迭代器我们还可以加上类型判断及相应的处理,这使得我们可以不必关注底层的迭代代码实现。
    (2)从这种角度来看,你可以将迭代器看做可迭代对象的函数化,有一个非常流行的迭代器库itertools,其实就是如上所说的,他为很多可迭代类型提前定义好了一些列的常见迭代方式,并封装为了迭代器,这样大家就可以很方便的直接通过调用此模块玩转迭代。
    https://www.cnblogs.com/leohahah/p/10189281.html

    举例:两种迭代器类型

    #-*- coding: utf-8 -*-
    list=['a','b','c','d','e','f','g','h','i','j']
    class iter_standard(object):
        def __init__(self,list):
            self.list=list
            self.len = len(self.list)
            self.cur_pos = -1
        def __iter__(self):
            return self
        def __next__(self):
            self.cur_pos += 1
            if self.cur_pos<self.len:
                return self.list[self.cur_pos]
            else:
                raise StopIteration()
    class iter_reverse(object):
        def __init__(self,list):
            self.list=list
            self.len = len(self.list)
            self.cur_pos = self.len
        def __iter__(self):
            return self
        def __next__(self):
            self.cur_pos -= 1
            if self.cur_pos>=0:
                return self.list[self.cur_pos]
            else:
                raise StopIteration()
    for e in iter_standard(list):
        print (e)
    for e in iter_reverse(list):
        print (e)
    out:
    a
    b
    c
    d
    e
    f
    g
    h
    i
    j
    j
    i
    h
    g
    f
    e
    d
    c
    b
    a
    

    相关文章

      网友评论

          本文标题:python数据分析基础37-创建迭代器类型

          本文链接:https://www.haomeiwen.com/subject/lygybhtx.html