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

【Python入门第二十四天】Python 迭代器

Python 迭代器

迭代器是一种对象,该对象包含值的可计数数字。

迭代器是可迭代的对象,这意味着您可以遍历所有值。

从技术上讲,在 Python 中,迭代器是实现迭代器协议的对象,它包含方法 iter() 和 next()。

迭代器 VS 可迭代对象(Iterable)

列表、元组、字典和集合都是可迭代的对象。它们是可迭代的容器,您可以从中获取迭代器(Iterator)。

所有这些对象都有用于获取迭代器的 iter() 方法:

实例

从元组返回一个迭代器,并打印每个值:

mytuple = ("apple", "banana", "cherry")
myit = iter(mytuple)print(next(myit))
print(next(myit))
print(next(myit))

运行实例

apple
banana
cherry

甚至连字符串都是可迭代的对象,并且可以返回迭代器:

实例

字符串也是可迭代的对象,包含一系列字符:

mystr = "banana"
myit = iter(mystr)print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))
print(next(myit))

运行实例

b
a
n
a
n
a

遍历迭代器

我们也可以使用 for 循环遍历可迭代对象:

实例

迭代元组的值:

mytuple = ("apple", "banana", "cherry")for x in mytuple:print(x)

运行实例

python_iterator_loop_1.py
apple
banana
cherry

实例

迭代字符串中的字符:

mystr = "banana"for x in mystr:print(x)

运行实例

python_iterator_loop_2.py
b
a
n
a
n
a

提示:for 循环实际上创建了一个迭代器对象,并为每个循环执行 next() 方法。

创建迭代器

要把对象/类创建为迭代器,必须为对象实现 iter() 和 next() 方法。

正如您在 Python 类/对象 一章中学到的,所有类都有名为 init() 的函数,它允许您在创建对象时进行一些初始化。

iter() 方法的作用相似,您可以执行操作(初始化等),但必须始终返回迭代器对象本身。

next() 方法也允许您执行操作,并且必须返回序列中的下一个项目。

实例

创建一个返回数字的迭代器,从 1 开始,每个序列将增加 1(返回 1、2、3、4、5 等):

class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):x = self.aself.a += 1return xmyclass = MyNumbers()
myiter = iter(myclass)print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))
print(next(myiter))

运行实例

python_iterator_create_1.py
1
2
3
4
5

StopIteration

如果你有足够的 next() 语句,或者在 for 循环中使用,则上面的例子将永远进行下去。

为了防止迭代永远进行,我们可以使用 StopIteration 语句。

next() 方法中,如果迭代完成指定的次数,我们可以添加一个终止条件来引发错误:

实例

在 20 个迭代之后停止:

class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):if self.a <= 20:x = self.aself.a += 1return xelse:raise StopIterationmyclass = MyNumbers()
myiter = iter(myclass)for x in myiter:print(x)

运行实例

python_iterator_create_2.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

相关文章:

【Python入门第二十四天】Python 迭代器

Python 迭代器 迭代器是一种对象&#xff0c;该对象包含值的可计数数字。 迭代器是可迭代的对象&#xff0c;这意味着您可以遍历所有值。 从技术上讲&#xff0c;在 Python 中&#xff0c;迭代器是实现迭代器协议的对象&#xff0c;它包含方法 iter() 和 next()。 迭代器 V…...

Qt扫盲-CMake 使用概述

CMake 使用概述一、概述二、创建Qt CMake 项目三、简单介绍1. 引入Qt的库2.Qt CMake 引入第三方库3. Qt CMake 项目目录四、使用案例一、概述 CMake是一个简化跨不同平台开发项目的构建过程的工具。对C来说其实就是生成一个文件&#xff0c;文件里面描述了&#xff0c;怎么组织…...

minGW-w64配置途径

文章目录1 GNU、GCC与minGW2 minGW当前下载方式3 minGW-w64配置途径Step1Step2Step31 GNU、GCC与minGW GNU这个名字是GNUs Not Unix的递归首字母缩写&#xff0c;它的发音为[gnoo]&#xff0c;只有一个音节&#xff0c;发音很像"grew"&#xff0c;但需要把其中的r音替…...

程序、进程、线程的基本概念、信号量的PV操作、前趋图的PV操作

程序、进程、线程的基本概念 进程控制块PCB的组织方式&#xff1a;顺序方式、链接方式、索引方式、Hash。 在JVM 中进程与线程关系 进程&#xff1a; 拥有资源的独立单位。可以被独立调度。可以分配资源。 线程&#xff1a; 可以被独立调度。同一进程中的多个线程&#xff0c;…...

设计测试用例

目录 测试用例的基本要素 测试用例的设计方法 功能需求测试分析 非功能需求测试分析 设计测试用例的具体方法 测试用例的基本要素 测试用例&#xff08;Test Case&#xff09;是为了实施测试而向被测试的系统提供的一组集合&#xff0c;这组集合包含&#xff1a;测试环境…...

CSS 选择器以及CSS常用属性

目录 &#x1f407;今日良言:可以不光芒万丈,但不要停止发光 &#x1f42f;一、写CSS的三种方法 &#x1f42f;二、CSS选择器的常见用法 &#x1f42f;三、CSS常用属性 &#x1f407;今日良言:可以不光芒万丈,但不要停止发光 &#x1f42f;一、写CSS的三种方法 CSS的基本语…...

测试概念及模型

今日目标掌握测试用例包含的基本内容使用等价类方法设计出测试用例1. 软件测试分类&#xff08;复习&#xff09;1.1 按阶段划分单元测试测试&#xff1a;针对单个功能进行测试&#xff0c;如&#xff1a;登录、购物车等开发&#xff08;更多的理解&#xff09;&#xff1a;针对…...

王道计算机组成原理课代表 - 考研计算机 第六章 总线 究极精华总结笔记

本篇博客是考研期间学习王道课程 传送门 的笔记&#xff0c;以及一整年里对 计算机组成 知识点的理解的总结。希望对新一届的计算机考研人提供帮助&#xff01;&#xff01;&#xff01; 关于对 “总线” 章节知识点总结的十分全面&#xff0c;涵括了《计算机组成原理》课程里的…...

【C++升级之路】第八篇:string类

&#x1f31f;hello&#xff0c;各位读者大大们你们好呀&#x1f31f; &#x1f36d;&#x1f36d;系列专栏&#xff1a;【C学习与应用】 ✒️✒️本篇内容&#xff1a;简单介绍string类的概念、string类的常用接口、string类的模拟实现&#xff08;各个常见接口的实现代码&…...

mysql性能优化_原理_课程大纲

1、MySQL在金融互联网行业的企业级安装部署 目录章节版本说明版本说明安装MySQL规范1 安装方式2 安装用户3 目录规范MySQL 5.7 安装部署1 操作系统配置2 创建用户3 创建目录4 安装5 配置文件6 安装依赖包7 配置环境变量8 初始化数据库9 重置密码MySQL8 安装MySQL8 安装源码安装…...

项目管理报告工具的功能

项目报告软件哪个好&#xff1f;Zoho Projects的项目管理报告工具为您提供整个组织的360可见性&#xff0c;获取所有项目的实时更新&#xff0c;使用强大的项目报告软件推动成功。Zoho Projects的项目报告软件允许团队整理和监控他们的资源和项目&#xff0c;以评估进度并避免对…...

centos8上安装hbase

【README】1.本文部分内容转自&#xff1a;https://computingforgeeks.com/how-to-install-apache-hadoop-hbase-on-centos-7/2.本文是在单机上安装hbase &#xff08;仅用于学习交流&#xff09;&#xff1b; 【1】更新系统因为 hadoop和hbase是动态的&#xff0c;为便于hbase…...

linux 进程及调度基础知识

引用Linux进程管理专题Linux进程管理与调度-之-目录导航Linux下0号进程的前世(init_task进程)今生(idle进程)----Linux进程的管理与调度&#xff08;五&#xff09;蜗窝科技-进程管理郭健&#xff1a; Linux进程调度技术的前世今生之“前世”郭健&#xff1a; Linux进程调度技术…...

Python计算分类问题的评价指标(准确率、精确度、召回率和F1值,Kappa指标)

机器学习的分类问题常用评论指标有&#xff1a;准确率、精确度、召回率和F1值&#xff0c;还有kappa指标 。 每次调包去找他们的计算代码很麻烦&#xff0c;所以这里一次性定义一个函数&#xff0c;直接计算所有的评价指标。 每次输入预测值和真实值就可以得到上面的指标值&a…...

51单片机LCD1602的使用

文章目录前言一、LCD1602简单介绍二、LCD1602中各个引脚的作用四、LCD1602命令解析1.写命令2.写数据3.清屏指令4.光标归位指令5.进入模式设置指令6.显示开关控制指令7.设定显示屏或光标移动方向指令三、LCD1602代码编写四、代码测试总结前言 本篇文章将为大家讲解LCD1602的使用…...

[深入理解SSD系列综述 1.5] SSD固态硬盘参数图文解析_选购固态硬盘就像买衣服?

版权声明&#xff1a;付费作品&#xff0c;未经许可&#xff0c;不可转载前言SSD &#xff08;Solid State Drive&#xff09;&#xff0c;即固态硬盘&#xff0c;通常是一种以半导体闪存&#xff08;NAND Flash&#xff09;作为介质的存储设备。SSD 以半导体作为介质存储数据&…...

zio1升级到zio2踩坑和总结

并不全&#xff0c;记录了一些流程和注意点。新项目建议直接用zio2&#xff01; 首先&#xff0c;从1.0迁移到2.0&#xff0c;可以使用官方的scalefix规则完成一部分方法自动替换&#xff08;迁移主要解决方法重命名&#xff0c;去掉Has&#xff09;。 然后&#xff0c;添加依…...

【算法题】1834. 单线程 CPU

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 题目&#xff1a; 给你一个二维数组 tasks &#xff…...

Vue学习[2023]

笔记 一、Vue基础&#xff1a; 1.模板语法有2大类&#xff1a; 插值语法&#xff1a; 功能&#xff1a;用于解析标签体内容。 写法&#xff1a;{{xxx}}&#xff0c;xxx是js表达式&#xff0c;且可以直接读取到data中的所有属性。 指令语法&#xff1a; 功能&#xff1a;用于…...

【Redis】Redis分片集群

【Redis】Redis分片集群 文章目录【Redis】Redis分片集群1. 搭建分片集群1.1 分片集群结构1.2 搭建分片集群1.2.1 集群结构1.2.2 准备实例和配置1.2.3 启动1.2.4 创建集群1.2.5 测试2. 散列插槽2.1 总结3. 集群伸缩4. 故障转移4.1 数据迁移5. RedisTemplate访问分片集群1. 搭建…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…...

Docker 离线安装指南

参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性&#xff0c;不同版本的Docker对内核版本有不同要求。例如&#xff0c;Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本&#xff0c;Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...

docker详细操作--未完待续

docker介绍 docker官网: Docker&#xff1a;加速容器应用程序开发 harbor官网&#xff1a;Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台&#xff0c;用于将应用程序及其依赖项&#xff08;如库、运行时环…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

Docker 运行 Kafka 带 SASL 认证教程

Docker 运行 Kafka 带 SASL 认证教程 Docker 运行 Kafka 带 SASL 认证教程一、说明二、环境准备三、编写 Docker Compose 和 jaas文件docker-compose.yml代码说明&#xff1a;server_jaas.conf 四、启动服务五、验证服务六、连接kafka服务七、总结 Docker 运行 Kafka 带 SASL 认…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

laravel8+vue3.0+element-plus搭建方法

创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...