Python基础:迭代器(Iterators)详解

在这里插入图片描述

什么是迭代器?

  迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

1. 迭代对象

  Python中使用迭代器的地方很多,大多数的容器对象都是可迭代对象,如列表、元组、字典、字符串等,均可以使用for语句进行迭代循环,如

for element in [1,2,3]:print(element)
for element in ('a','b','c'):print(element)
for key in {'one':1,'two':2}:print(key)
for char in 'abc':print(char)
for line in open('test.txt',encoding='utf-8'):print(line,end=' ')

  这种访问风格清晰、简洁又方便。
  迭代器的使用非常普遍并使得 Python 成为一个统一的整体。 在幕后,for语句会在容器对象上调用iter()
  该函数返回一个定义了__next__() 方法的迭代器对象,此方法将逐一访问容器中的元素。 当元素用尽时,__next__() 将引发 StopIteration 异常来通知终止for 循环。 可以使用next() 内置函数来调用 __next__() 方法。

2. 使用 next()方法

在这里插入图片描述
  字符‘abc’可以正常使用next()三次,当迭代次数超过了字符串中的元素个数,就会抛出StopIteration异常

3. 其他迭代器示例

# 使用内置的 iter() 和 next() 函数
my_list = [1, 2, 3, 4, 5]
my_iterator = iter(my_list)# 逐个输出列表中的元素
print(next(my_iterator))  # 输出 1
print(next(my_iterator))  # 输出 2
# 使用生成器函数创建迭代器
def square_generator(n):for i in range(n):yield i ** 2squares = square_generator(5)
for square in squares:print(square)
# 使用 enumerate() 构建迭代器获取元素和索引
my_list = ['apple', 'banana', 'orange']for index, value in enumerate(my_list):print(f"Index: {index}, Value: {value}")
# 使用 zip() 合并多个可迭代对象
names = ['Alice', 'Bob', 'Charlie']
ages = [25, 30, 35]for name, age in zip(names, ages):print(f"Name: {name}, Age: {age}")

4. 自定义迭代器

4.1 自定义iter()和next()

定义一个方法 返回一个带有方法的对象。如果类 定义,然后可以返回:__next__()__iter__()self

class Reverse:"""Iterator for looping over a sequence backwards."""def __init__(self, data):self.data = dataself.index = len(data)def __iter__(self):return selfdef __next__(self):if self.index == 0:raise StopIterationself.index = self.index - 1return self.data[self.index]rev = Reverse('spam')
iter(rev)for char in rev:print(char)

4.2 自定义迭代器中实现斐波那契数列

class Fibonacci:def __init__(self, limit):self.limit = limitself.a, self.b = 0, 1def __iter__(self):return selfdef __next__(self):if self.a <= self.limit:result = self.aself.a, self.b = self.b, self.a + self.breturn resultelse:raise StopIterationfib_iter = Fibonacci(20)
for num in fib_iter:print(num)

  生成:
在这里插入图片描述
  使用迭代器的主要优势是它们不需要在开始时就加载整个数据集到内存中。这对于大数据集或者流数据尤其有用。
  迭代器是Python中一个强大而灵活的工具,可以简化遍历复杂数据结构的过程。通过理解和使用迭代器,可以编写出更高效、更优雅的Python代码。

  参考:迭代器官方文档

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/198866.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

T10 数据增强

文章目录 一、准备环境和数据1.环境2. 数据 二、数据增强&#xff08;增加数据集中样本的多样性&#xff09;三、将增强后的数据添加到模型中四、开始训练五、自定义增强函数六、一些增强函数 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f…

Scrapy----Scrapy简介

文章目录 概述与应用背景架构和组件功能和特点社区生态概述与应用背景 Scrapy,一个高效、灵活、且强大的Web爬取框架,被广泛应用于数据抓取和网页内容的结构化提取。它是用Python编写的,支持多平台运行,适用于数据挖掘、在线零售信息收集、历史数据存档等多种场景。Scrapy…

thinkphp8 DB_PREFIX 属性

设计表的时候使用**_user, **就是前缀&#xff0c;DB_PREFIX就是默认把前缀给去掉 在config/database.php prefix&#xff0c;改成你的前缀&#xff0c;数据库的表重命名‘ltf_user’ 代码调用 $user Db::name("user")->select();return json($user);之前是使用…

4.1 Linux操作系统

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 我们上次了解了从操作系统往下的部分&#xff1a;Linux进程前导知识 这一次&#xff0c;我们将正式开始进程以及操作系统(OS)及其以上的部分。 我们将操作系统的内存管理&#xff0c;进程管理&#xff0c;文件管理等等称为操…

安防视频监控平台EasyCVR服务器部署后出现报错,导致无法级联到域名服务器,该如何解决?

视频监控平台EasyCVR能在复杂的网络环境中&#xff0c;将分散的各类视频资源进行统一汇聚、整合、集中管理&#xff0c;在视频监控播放上&#xff0c;安防监控平台可支持1、4、9、16个画面窗口播放&#xff0c;可同时播放多路视频流&#xff0c;也能支持视频定时轮播。视频监控…

Git详解

Git是一个开源的分布式版本控制系统&#xff0c;常用于软件开发中对代码版本管理。Git具有版本控制、协作开发、分支管理、代码审查等功能&#xff0c;能够记录每次代码修改的内容和时间&#xff0c;并能够回滚到任意历史版本&#xff0c;方便团队协作和代码维护。 Git的基本概…

在通用jar包中引入其他spring boot starter,并在通用jar包中直接配置这些starter的yml相关属性

场景 我在通用jar包中引入 spring-boot-starter-actuator 这样希望引用通用jar的所有服务都可以直接使用 actuator 中的功能&#xff0c; 问题在于&#xff0c;正常情况下&#xff0c;actuator的配置都写在每个项目的yml文件中&#xff0c;这就意味着&#xff0c;虽然每个项目…

数据结构【DS】栈

共享栈 共享栈的目的是什么&#xff1f; 目的:有效利用存储空间。 共享栈的存取数据时间复杂度为&#xff1f; 存取数据时间复杂度为O(1) 共享栈如何判空&#xff1f;如何判满&#xff1f; 两个栈的栈顶指针都指向栈顶元素&#xff0c;&#x1d461;&#x1d45c;&#x1d45d;…

4-5学生分数对应的成绩

![#include<stdio.h> int main(){float score;char grade;for(int i0;i<7;i){printf("请输入成绩&#xff1a;");scanf("%f",&score);while(score>100||score<0){printf("\n输入的成绩有误&#xff0c;请重新输入&#xff1a;&quo…

【hacker送书第2期】计算机考研精炼1000题

第2期图书推荐 计算机考研难点《计算机考研精炼1000题》揭秘问答1. 为什么是1000题&#xff1f;2. 有什么优势&#xff1f;3. 编写团队水平如何&#xff1f;4. 题目及解析品质如何&#xff1f;可以试读吗&#xff1f; 参与方式 计算机考研难点 难度高&#xff01;知识点多&…

day29_Servlet

今日内容 零、 复习昨日 一、Servlet 零、 复习昨日 一、Servlet 1.1 Servlet介绍 javaweb开发,就是需要服务器接收前端发送的请求,以及请求中的数据,经过处理(jdbc操作),然后向浏览器做出响应. 我们要想在服务器中写java代码来接收请求,做出响应,我们的java代码就得遵循tomca…

旋极携手西班牙SoC-e公司,为中国客户提供高效可靠TSN通讯解决方案

2023年2月&#xff0c;旋极信息与西班牙SoC-e公司正式签订战略合作协议&#xff0c;成为其在中国区重要合作伙伴。 SoC-e是一家世界领先的基于FPGA技术的以太网通讯解决方案供应商&#xff0c;是一系列IP核开发领域的先锋&#xff0c;为关键任务实施网络化、同步性和安全性提供…

深入理解 synchronized 原理

目录 一. 前言 二. Java对象的内存布局 2.1. 对象头 2.2. Mark Word 2.3. Class Metadata Pointer 2.4. Length 三. 偏向锁 3.1. 偏向锁的工作流程 3.2. 偏向失效 3.2.1. 误区一 3.3. 偏向撤销 3.3.1. 误区一 3.4. 偏向撤销的底层实现 3.5. HashCode与偏向撤销 …

【Dubbo】Dubbo负载均衡实现解析

&#x1f4eb;作者简介&#xff1a;小明java问道之路&#xff0c;2022年度博客之星全国TOP3&#xff0c;专注于后端、中间件、计算机底层、架构设计演进与稳定性建设优化&#xff0c;文章内容兼具广度、深度、大厂技术方案&#xff0c;对待技术喜欢推理加验证&#xff0c;就职于…

动态库符号抢占问题分析

背景 前段时间在北汽项目中&#xff0c;遇到了一个奇怪现象&#xff0c;困扰了大家较长时间。最终在和同事的不懈努力下&#xff0c;从根因上解决了该问题&#xff0c;过程中也学习到了很多。在此&#xff0c;记录并分享&#xff0c;希望能够帮助大家。 问题描述 作为OTA服务的…

客户管理系统大盘点!推荐这五款

客户管理系统大盘点&#xff01;推荐这五款。 客户管理系统也就是CRM&#xff0c;可以说是企业刚需&#xff0c;国内外的客户管理系统也是数不胜数&#xff0c;到底有哪些是真正好用&#xff0c;值得推荐的呢&#xff1f;本文将为大家推荐这5款好用的客户管理系统&#xff1a;…

R语言:利用biomod2进行生态位建模

在这里主要是分享一个不错的代码&#xff0c;喜欢的可以慢慢研究。我看了一遍&#xff0c;觉得里面有很多有意思的东西&#xff0c;供大家学习和参考。 利用PCA轴总结的70个环境变量&#xff0c;利用biomod2进行生态位建模&#xff1a; #------------------------------------…

elasticsearch 概述

初识elasticsearch 了解ES elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在GitHub搜索代码 在电商网站搜索商品 ELK技术栈 elasticsearc…

基于FPGA的五子棋(论文+源码)

1.系统设计 在本次设计中&#xff0c;整个系统硬件框图如下图所示&#xff0c;以ALTERA的FPGA作为硬件载体&#xff0c;VGA接口&#xff0c;PS/2鼠标来完成设计&#xff0c;整个系统可以完成人人对战&#xff0c;人机对战的功能。系统通过软件编程来实现上述功能。将在硬件设计…

centos的root密码忘记或失效的解决办法

目录 前言1 单机维护模式2 利用具有管理员权限的用户切换到root用户3 救援模式 前言 在Linux系统中&#xff0c;root用户是最高权限的用户&#xff0c;可以执行任何命令和操作。但是&#xff0c;如果我们忘记了root用户的密码&#xff0c;或者需要修改root用户的密码&#xff…