Python学习笔记第十一天(迭代器与生成器)

2023-10-31

迭代器与生成器

迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

迭代器是一个可以记住遍历的位置的对象。

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

迭代器有两个基本的方法:iter()next()

字符串,列表或元组对象都可用于创建迭代器。

# 实例 1
list=[1,2,3,4]
it = iter(list)    # 创建迭代器对象  
print (next(it))   # 输出迭代器的下一个元素

迭代器对象可以使用常规for语句、while语句等进行遍历。

# 实例 2
list=[1,2,3,4] 
it = iter(list) # 创建迭代器对象 
for x in it: 
    print (x, end=" ")

StopIteration

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 next() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

在 20 次迭代后停止执行。

# 实例 3
class MyNumbers:
    def __iter__(self):
        self.a = 1
        return self
    def __next__(self):
        if self.a <= 20:
            x = self.a
            self.a += 1 
            return x 
        else: 
            raise StopIteration 
myclass = MyNumbers()
myiter = iter(myclass) 
for x in myiter:
    print(x)

生成器

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

以下实例使用 yield 实现斐波那契数列。

# 实例 4
import sys 
def fibonacci(n): # 生成器函数 - 斐波那契 
    a, b, counter = 0, 1, 0 
    while True: 
        if (counter > n): 
        return 
        yield a 
        a, b = b, a + b 
        counter += 1 
f = fibonacci(10) # f 是一个迭代器,由生成器返回生成
while True:
    try: 
        print (next(f), end=" ")
    except StopIteration: 
        sys.exit()

结束语

今天学习的是Python迭代器与生成器学会了吗。 今天学习内容总结一下:

  1. 迭代器
  2. StopIteration
  3. 生成器
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python学习笔记第十一天(迭代器与生成器) 的相关文章

  • Python - 比较同一字典中的值

    我有一本字典 d Trump MAGA FollowTheMoney Clinton dems Clinton Stein FollowTheMoney Atlanta 我想删除字符串列表中的重复字符串 该字符串是键的值 对于这个例子 期望
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • NLTK 2.0分类器批量分类器方法

    当我运行此代码时 它会抛出一个错误 我认为这是由于 NLTK 3 0 中不存在batch classify 方法 我很好奇如何解决旧版本中的某些内容在新版本中消失的此类问题 def accuracy classifier gold resu
  • Python 3d 绘图设置固定色阶

    我正在尝试绘制两个 3d 数组 第一个数组的 z 值在范围内 0 15 0 15 第二个来自 0 001 0 001 当我绘图时 色标自动遵循数据范围 如何设置自定义比例 我不想看到 0 001 的浅色 而应该看到 0 15 的浅色 如何修
  • 打印包含字符串和其他 2 个变量的变量

    var a 8 var b 3 var c hello my name is var a and var b bye print var c 当我运行程序时 var c 会像这样打印出来 hello my name is 8 and 3 b
  • Python 3:将字符串转换为变量[重复]

    这个问题在这里已经有答案了 我正在从 txt 文件读取文本 并且需要使用我读取的数据之一作为类实例的变量 class Sports def init self players 0 location name self players pla
  • 未知错误:Chrome 无法启动:异常退出

    当我使用 chromedriver 对 Selenium 运行测试时 出现此错误 selenium common exceptions WebDriverException Message unknown error Chrome fail
  • 嵌套作用域和 Lambda

    def funct x 4 action lambda n x n return action x funct print x 2 prints 16 我不太明白为什么2会自动分配给n n是返回的匿名函数的参数funct 完全等价的定义fu
  • Django 视图中的“请求”是什么

    在 Django 第一个应用程序的 Django 教程中 我们有 from django http import HttpResponse def index request return HttpResponse Hello world
  • 找到一个数字所属的一组范围

    我有一个 200k 行的数字范围列表 例如开始位置 停止位置 该列表包括除了非重叠的重叠之外的所有类型的重叠 列表看起来像这样 3 5 10 30 15 25 5 15 25 35 我需要找到给定数字所属的范围 并对 100k 个数字重复该
  • Spider 必须返回 Request、BaseItem、dict 或 None,已“设置”

    我正在尝试从以下位置下载所有产品的图像 我的蜘蛛看起来像 from shopclues items import ImgData import scrapy class multipleImages scrapy Spider name m
  • 带有 LSTM 的 GridSearchCV/RandomizedSearchCV

    我一直在尝试通过 RandomizedSearchCV 调整 LSTM 的超参数 我的代码如下 X train X train reshape X train shape 0 1 X train shape 1 X test X test
  • 如何以正确的方式为独立的Python应用程序制作setup.py?

    我读过几个类似的主题 但还没有成功 我觉得我错过或误解了一些基本的事情 这就是我失败的原因 我有一个用 python 编写的 应用程序 我想在标准 setup py 的帮助下进行部署 由于功能复杂 它由不同的 python 模块组成 但单独
  • 制作一份 Python 文档的 PDF 文件

    Python 官方网站提供 PDF 文档下载 但它们是按章节分隔的 我下载了源代码并构建了 PDF 文档 这些文档也是单独的 PDF 我怎么能够从源代码中的 Makefile 构建一个 PDF 文件 我认为这样阅读起来会更方便 如果连接单独
  • 等待子进程使用 os.system

    我用了很多os system在 for 循环内调用创建后台进程 如何等待所有后台进程结束 os wait告诉我没有子进程 ps 我使用的是Solaris 这是我的代码 usr bin python import subprocess imp
  • 在virtualenv中下载sqlite3

    我正在尝试使用命令创建应用程序python3 manage py startapp webapp但我收到一条错误消息 django core exceptions ImproperlyConfigured 加载时出错 pysqlite2 或
  • 如何在 Flask 中的视图函数/会话之间传递复杂对象

    我正在编写一个 Web 应用程序 当 且仅当 用户登录时 该应用程序从第三方服务器接收大量数据 这些数据被解析为自定义对象并存储在list 现在 用户在应用程序中使用这些数据 调用不同的视图 例如发送不同的请求 我不确定什么是最好的模式在视
  • 将索引与值交换的最快方法

    考虑pd Series s s pd Series list abcdefghij list ABCDEFGHIJ s A a B b C c D d E e F f G g H h I i J j dtype object 交换索引和值并
  • python 对浮点数进行不正确的舍入

    gt gt gt a 0 3135 gt gt gt print 3f a 0 314 gt gt gt a 0 3125 gt gt gt print 3f a 0 312 gt gt gt 我期待 0 313 而不是 0 312 有没有
  • 如何在Python脚本中从youtube-dl中提取文件大小?

    我是 python 编程新手 我想在下载之前提取视频 音频大小 任何 YouTube 视频 gt gt gt from youtube dl import YoutubeDL gt gt gt url https www youtube c

随机推荐

  • ChatGPT写作提示词指令大全

    1 用ChatGPT写影评 指令 你是一个自媒体人 同时也是一个专业的影评人 最近熬夜看完了韩剧黑暗荣耀第一季和第二季 忍不住想在公众号分享给粉丝们 请写一篇1000字左右的自媒体文章 并且加上一个有吸引力的标题 指令模板 你是一个自媒体人
  • 使用腾讯云 GPU 学习深度学习系列

    https cloud tencent com developer article 1005199
  • 模拟电路设计(17)---典型RC正弦波振荡器

    RC正弦波振荡器 采用LC器件作为振荡电路的反馈网络可以达到很高的输出频率 器件比较容易实现小体积 但是要求振荡器输出几十或者几百Hz信号时 LC器件的取值会很大 很难实现实用的产品 此时采用RC选频网络就会有很大的优势 RC LC反馈振荡
  • C#:Xxxx.GetTypes()引发了类型“System.Reflection.ReflectionTypeLoadException”的异常

    参考 Xxxx GetTypes 引发了类型 System Reflection ReflectionTypeLoadException 的异常 Nemo的笔记本 CSDN博客
  • 用户界面与业务逻辑的分离

    前面分别实现了计算器程序的用户界面和业务逻辑 基本程序架构一般包含 用户界面模块 UI 接受用户输入及呈现数据 业务逻辑模块 Business Logic 根据用户需求处理数据 基本设计原则 功能模块之间需要进行解耦 核心思想 强内聚 弱耦
  • 以太坊开发框架——Truffle的基础使用

    这里写目录标题 Truffle Truffle 简介 Truffle 的客户端 安装Truffle 创建项目 Migration artifacts require exports 的函数 deployer 对象 更新 migration
  • TCP三次握手

    TCP三次握手的原因 双方都确认对方具有接收和发送数据的功能 1 初始状态 双方都处于Closed状态 2 服务器开启监听功能 处于Listen状态 3 第一次握手 客户端发起请求 发送一个SYN标识 连接请求数据包 seq x 并处于SY
  • vue 树形结构数据的便捷遍历,及树形结构与平级列表的相互转换(使用xe-utils函数)

    一 使用xe utils函数 xe utils 的api地址 xe utils 函数库 工具类 二 安装 npm安装 npm install xe utils 引用 import XEUtils from xe utils 1 mapTre
  • 数据结构(使用静态数组实现顺序表)

    一 定义 1 线性表 1 线性表的定义 逻辑结构 具有相同数据类型的n n gt 0 的有限个数的数据元素的有序排列 2 线性表的运算 操作 创建销毁 增删改查 3 线性表的存储结构 顺序存储 产生了顺序表 链式存储 产生了链表 2 顺序表
  • 华为云服务器怎么传文件,在云服务器终端里面怎么传文件

    在云服务器终端里面怎么传文件 内容精选 换一换 已获取该弹性云服务器的密钥文件 弹性云服务器已经绑定弹性IP地址 已配置安全组入方向的访问规则 如果您是在Windows操作系统上登录Linux 可以按照下面方式登录弹性云服务器 我们以PuT
  • 数据结构——单调栈

    单调栈 定义 单调递增栈 单调递增栈就是从栈底到栈顶数据是从小到大 单调递减栈 单调递减栈就是从栈底到栈顶数据是从大到小 实现 以单调递增栈为例 向栈中推入元素时 如果栈顶元素比当前元素大 则将栈顶元素推出 直到栈顶元素比当前元素小或者栈为
  • IDEA新建项目时,没有Spring Initializr选项(亲测有效)

    最近开始使用IDEA作为开发工具 然后也是打算开始学习使用spring boot 看着博客来进行操作上手spring boot 很多都是说 创建一个新项目 Create New Project 选择 Spring Initializr 然而
  • 全网最全jupyter安装与使用教程

    jupyter的安装与使用 注 我主要使用的是windows系统 其余的也不太了解 不过这篇文章可以解决大部分问题 部分图片过大 建议打开网址 简介 Jupyter Notebook是基于网页的用于交互计算的应用程序 简而言之 Jupyte
  • c++输出字符数组出现汉字乱码(包含用for循环输入字符数组再输出数组,出现汉字乱码)

    原因在于字符数组里存放内容没有字符结束标志 0 例子1 没有 0 include
  • c#翻页效果

    用c 和GDI 实现杂志翻页动画效果时间 2010 01 13 blog csdn net 周公 说明 以前本人参与个一个电子杂志项目 当时要求实现模拟现实生活中的杂志翻页动画效果 别人推荐了这篇文章 最后达到了我想要的效果 今天尝试把这篇
  • 漫谈-Weblogic-CVE-2020-2555

    背景 2020年1月 互联网上爆出了weblogic反序列化远程命令执行漏洞 CVE 2020 2555 Oracle Fusion中间件Oracle Coherence存在缺陷 攻击者可利用该漏洞再未授权情况下通过构造T3协议请求 获取w
  • 软件测试面试题:HTTP和HTTPS协议区别?

    HTTP和HTTPS协议区别 https协议需要到CA Certificate Authority 证书颁发机构 申请证书 一般免费证书较少 因而需要一定费用 http是超文本传输协议 信息是明文传输 Https协议是由SSL和Http协议
  • 6 种易于上手的编程副业,每月赚取 1,000 多美元——没有废话

    没有自由职业者或博客 也不需要前期费用 你们中的大多数人阅读这样的故事是希望其中的一些故事能帮助您赚更多的钱 好吧 几年前我还是同一个人 我希望尝试一些新的副业并赚点钱 其中一个视频建议我在网上写作 此后我写了很多技术文章 在此过程中 我开
  • react结合js获取屏幕鼠标滚动等距离实现页面懒加载

    懒加载 也叫延迟加载 指的是在长网页中延迟加载内容或图像 是一种很好优化网页性能的方式 在滚动屏幕之前 可视化区域之外的内容不会进行加载 在屏幕滚动距离底部到一定距离时才加载 这样网页的加载速度更快 减少了服务器的负载 懒加载适用于图片较多
  • Python学习笔记第十一天(迭代器与生成器)

    Python学习笔记第十一天 迭代器与生成器 迭代器 StopIteration 生成器 结束语 迭代器与生成器 迭代器 迭代是Python最强大的功能之一 是访问集合元素的一种方式 迭代器是一个可以记住遍历的位置的对象 迭代器对象从集合的