ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2021-12-14 02:00:19  阅读:196  来源: 互联网

标签:__ mylist 迭代 自定义 items self 生成器


自定义列表和迭代器

实现:创建并使用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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有