当前位置: 首页 > 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/news/289687.html

相关文章:

  • 【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
  • 2024.9.3 Python,二分查找解决在D天内送达包裹的能力,dfs二叉树的层平均值,动态规划二分查找贪心算法解决最长增长子序列和马戏团人塔
  • 第66期 | GPTSecurity周报
  • 无线信道中ph和ph^2的场景
  • gitee 简单使用
  • Storm AI : 最佳长文写作工具
  • 精准设计与高效开发:用六西格玛设计DFSS实现新能源汽车开发突破
  • 解除本地Git仓库与远程仓库关联
  • 【系统架构设计师-2021年】综合知识-答案及详解
  • 卷积神经网络(Datawhale X 李宏毅苹果书AI夏令营)
  • 宝贝甜梦秘籍!康姿百德柔压磁性枕豪华款守护成长每一夜