其他分享
首页 > 其他分享> > 十一、迭代器和生成器 2.自定义列表和迭代器

十一、迭代器和生成器 2.自定义列表和迭代器

作者:互联网

自定义列表和迭代器

实现:创建并使用for遍历自定义列表

MyList,自定义列表类
    1.__init__():初始化方法
    2.__iter__():对外提供迭代器
    3.addItem():添加元素

MyIterator,自定义迭代器类
    1.__init__():初始化方法
    2.__iter__():迭代器方法
    3.__next__():取值

# 自定义列表类
class MyList(object):
    def __init__(self):
        self.items = []

    # 对外提供迭代器
    def __iter__(self):
        # 创建并返回迭代器对象
        mylist_iterator = MyIterator(self.items)
        return mylist_iterator

    # 添加数据
    def addItem(self,item):
        self.items.append(item)
        print(self.items)

# 自定义迭代器类
class MyIterator(object):
    def __init__(self,items):
        # 接收可迭代对象传递的items
        self.items = items
        # 记录索引位置
        self.current_index = 0

    # 迭代器方法
    def __iter__(self):
        return self

    # 取值
    # 执行 next(iterator) 时会调用此方法
    def __next__(self):
        # 判断索引是否在列表范围内
        if self.current_index < len(self.items):
            # 获取索引对应的元素
            data = self.items[self.current_index]
            # 更新索引位置,返回取到的数据
            self.current_index += 1
            return data
        else:
            # 索引超出列表范围时抛出异常
            raise StopIteration


if __name__ == '__main__':
    # 创建自定义列表对象
    mylist = MyList()
    mylist.addItem('a')
    mylist.addItem('b')
    mylist.addItem('c')

    # # 1.通过 iter(iterable) 获取迭代器
    # # 2.通过 next() 取值
    # # 3.捕获异常
    # for i in mylist:
    #     print(i)

    mylist_iterator = iter(mylist)
    print(next(mylist_iterator))


['a']
['a', 'b']
['a', 'b', 'c']
a

标签:__,mylist,迭代,自定义,items,self,生成器
来源: https://www.cnblogs.com/HyeJeong/p/15686077.html