当前位置: 首页 > news >正文

迭代器与可迭代对象

概念层面:

        可迭代对象:

一个可迭代对象是指任何可以返回一个迭代器的对象。换句话说,它实现了 __iter__() 方法

比如:列表、元组、字典、字符串、集合等

直接通过 for 循环使用,因为 for 循环内部会调用其 __iter__() 方法来获取一个迭代器。

        迭代器:

迭代器是一个对象,它封装了遍历数据的过程。迭代器对象必须实现两个方法:

  • __iter__():返回自身,用于支持迭代器协议。

  • __next__():返回下一个元素;当没有元素时会抛出 StopIteration 异常。

my_list = [1, 2, 3, 4]
it = iter(my_list)   # 将列表转换为迭代器
print(next(it))      # 输出 1
print(next(it))      # 输出 2

代码层面:

        迭代器:

import sys

def main():
    # 读取二进制输入并解码(假设为 UTF-8 编码)
    data = sys.stdin.buffer.read().decode('utf-8').split()
    it = iter(data) # 
    t = int(next(it))
    res = []
    for _ in range(t):
        a = int(next(it))
        b = int(next(it))
        res.append(str(a + b))
    # 输出前先编码成二进制
    sys.stdout.buffer.write("\n".join(res).encode('utf-8'))

if __name__ == '__main__':
    main()

        可迭代对象:

 import sys

 def main():
     # 读取二进制输入并解码(假设为 UTF-8 编码)
     data = sys.stdin.buffer.read().decode('utf-8').split()
     # 第一个元素是测试用例数 t
     t = int(data[0])
     res = []
     # 后续的数字按照成对顺序排列,第 i 个测试用例对应 data[1 + i*2] 和 data[1 + i*2 + 1]
     for i in range(t):
         a = int(data[1 + i * 2])
         b = int(data[1 + i * 2 + 1])
         res.append(str(a + b))
     # 输出前先编码成二进制
     sys.stdout.buffer.write("\n".join(res).encode('utf-8'))

 if __name__ == '__main__':
     main()

两者之间的关系

  • 转换关系
    每个可迭代对象都可以通过内置函数 iter() 转换为一个迭代器。这意味着当你对一个可迭代对象使用 iter() 时,它返回的是一个能依次产生该对象中所有元素的迭代器

  • 迭代过程
    当你在 for 循环中遍历一个可迭代对象时,实际上是调用了这个对象的 __iter__() 方法,返回一个迭代器,然后不断调用迭代器的 __next__() 方法来获取元素,直到遇到 StopIteration 异常为止

  • 简化理解

    • 可迭代对象 就像一个“容器”,里面装着很多数据。

    • 迭代器 则是一个“指针”或“工具”,用来逐个取出容器中的数据。

相关文章:

  • 《汽车理论》第三章作业
  • 电脑ip地址每次开机会换吗?全面解析
  • 蓝桥杯 之 图论基础+并查集
  • 什么是openAPI
  • IDEA如何设置以新窗口打开新项目
  • 基于RK3588的YOLO多线程推理多级硬件加速引擎框架设计(项目总览和加速效果)
  • css属性列举
  • C++ 仿函数详解:让对象像函数一样调用
  • 15届蓝桥JavaB组 前6道题解
  • React(七):Redux
  • 网络安全 - SQL Injection
  • 从24GHz到71GHz:Sivers半导体的广泛频率范围5G毫米波产品解析
  • 全流程剖析需求开发:打造极致贴合用户的产品
  • 如何用Appuploader 快速一键发行苹果IOS开发者账户的开发者证书-发行cer证书以及转换.p12证书-优雅草卓伊凡
  • 洛谷题单1-P5704 【深基2.例6】字母转换-python-流程图重构
  • 【MyBatis】MyBatis 操作数据库(入门)
  • 庙算兵棋推演AI开发初探(6-神经网络开发)
  • prompt_status:5: command not found: wc解决办法
  • 解锁无痕采集的终极奥秘
  • 蓝桥杯省模拟赛 质因数之和
  • 电竞竞猜网站 建设/怎么免费制作网页
  • 宁波网站推广优化联系电话/sem搜索引擎
  • 乌兰察布网站制作/营销策略案例
  • 国外做的好的鲜花网站/入门seo技术教程
  • 网站开发 项目接单/网络优化app
  • 有没有代做课程设计的网站/百度推广怎么做最好