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

Python基础总结之Python中常见的迭代器介绍

Python基础总结之Python中常见的迭代器介绍

Python 提供了许多内置的迭代器,此外你还可以创建自定义的迭代器,以满足特定的编程需求。以下是一些常用的内置迭代器以及创建自定义迭代器的示例和工具类:

常用的内置迭代器

  1. enumerate()

    • 将一个可迭代对象(如列表)组合为一个索引序列,常用于在 for 循环中同时获取索引和元素。
    fruits = ['apple', 'banana', 'cherry']
    for index, fruit in enumerate(fruits):
        print(index, fruit)
    
  2. zip()

    • 将多个可迭代对象组合为一个迭代器,每次迭代返回一个元组,元组的元素来自不同的可迭代对象。
    names = ['Alice', 'Bob', 'Charlie']
    scores = [85, 90, 95]
    for name, score in zip(names, scores):
        print(name, score)
    
  3. iter()next()

    • iter() 用于将对象转换为迭代器,next() 用于从迭代器中获取下一个元素,适用于需要手动控制迭代的场景。
    nums = [1, 2, 3]
    it = iter(nums)
    print(next(it))  # 1
    print(next(it))  # 2
    
  4. reversed()

    • 返回一个反向迭代器,用于逆序遍历可迭代对象。
    for num in reversed(range(5)):
        print(num)
    
  5. itertools 模块

    • 提供了一组强大的迭代器函数,例如 count()cycle()chain()islice() 等,用于创建复杂的迭代器。
    from itertools import cycle, islice
    colors = cycle(['red', 'green', 'blue'])
    for color in islice(colors, 5):
        print(color)
    

自定义迭代器

你可以通过创建包含 __iter__()__next__() 方法的类来自定义迭代器。以下是一个简单的自定义迭代器示例:

class Countdown:
    def __init__(self, start):
        self.current = start

    def __iter__(self):
        return self

    def __next__(self):
        if self.current <= 0:
            raise StopIteration
        self.current -= 1
        return self.current

countdown = Countdown(5)
for num in countdown:
    print(num)

迭代器工具类

你还可以创建一些常用的迭代器工具类,以提高编程效率。以下是一个通用的迭代器工具类示例:

class RangeIterator:
    def __init__(self, start, end, step=1):
        self.current = start
        self.end = end
        self.step = step

    def __iter__(self):
        return self

    def __next__(self):
        if self.current >= self.end:
            raise StopIteration
        value = self.current
        self.current += self.step
        return value

range_iterator = RangeIterator(1, 10, 2)
for num in range_iterator:
    print(num)

这个 RangeIterator 类类似于 range() 函数,但可以更灵活地定义步长和范围。

通过使用这些内置和自定义的迭代器,你可以更好地控制迭代过程,优化代码,并应对各种复杂的编程场景。


http://www.kler.cn/a/289687.html

相关文章:

  • TortoiseSVN提示服务器凭证检核错误:站点名称不符
  • 第74期 | GPTSecurity周报
  • react动态路由
  • rockylinux 8安装 gcc11.2
  • 低代码集成多方API的简单实现
  • 2024开发者浏览器必备扩展,不允许还有人不知道~
  • 【PyQt6 应用程序】一键视频解说克隆场景切割版
  • Marin说PCB之闲谈设计经验之沟通
  • 【论文阅读】QUEEN: Query Unlearning against Model Extraction(2024)
  • log4j 控制台和文件输出乱码问题解决
  • VUE3 使用 <transition> 实现组件切换的过渡效果
  • ArcGIS Pro SDK (十二)布局 9 布局元数据与图框
  • 国产游戏技术的全球竞争力:挑战、机遇与创新驱动力
  • playbook剧本安装nginx、roles
  • 代理模式 JAVA
  • 同物种,不同版本之间的坐标转化
  • 基于SSM+Vue+MySQL的高校课程评价管理系统
  • YUM配置文件开启缓存
  • Java 基于微信小程序的小区服务管理系统,附源码
  • 【STM32+HAL库】---- 通用定时器实现外部脉冲计数
  • 力扣45-跳跃游戏II (java详细题解)
  • 图文解析保姆级教程: IDEA里面创建SpringBoot工程、SpringBoot项目的运行和测试、实现浏览器返回字符串
  • git查看代码提交记录
  • 【C++题解】1002 - 编程求解1+2+3+...+n
  • 【系统架构设计师】论文:论面向服务的架构设计及其应用
  • Vue3其他Api