python迭代器_使用Python的迭代器遍历可迭代对象
迭代器也是用来遍历对象成员的,前面讨论过使用for循环遍历序列对象成员,为什么Python还要提供迭代器呢?
1、为什么要使用迭代器?
使用for循环可以遍历序列对象,列表、元组、字符串都是序列对象,序列对象都有索引,通过索引可以访问序列对象的成员。在用for循环遍历序列对象时,即可以使用序列对象的索引来遍历,也可以使用序列项来遍历,for循环使用序列项遍历对象时,就用到了迭代器。另外,Python也有不是序列对象的数据,例如集合、字典、文件等,如何遍历这些数据类型的成员呢,这也需要用到迭代器。
Python提供的迭代器是非常强大的,它不仅可以遍历序列对象,也可以遍历非序列对象,例如遍历字典的所有键,集合的所有成员等等。迭代器本身提供了一个next方法,用于获取下一个对象成员,当用next方法获取全部成员后,再次调用next方法时,会引发StopIteration异常,这个异常不是错误,只是表示迭代已完成,因此使用迭代器迭代对象成员时,需要加入异常处理语句。
2、 哪些是可迭代对象?
迭代器提供了统一的访问接口,只要实现了__iter__和__next__方法的对象,都属于可迭代对象,可以使用迭代器进行迭代访问。序列对象包括列表、元组和字符串;非序列对象包括字典、集合和文件;实现了__iter__和__next__方法的自定义对象也属于可迭代对象。
例如:
上面的代码定义了一个test类(关于Python类的知识,在后面的章节会有详细介绍),test类实现了__iter__和__next__方法,属于可迭代对象。for……in……循环语句实现对test类对象的迭代访问,首先它通过__iter__方法获得test类的迭代器,然后循环调用__next__方法获得test对象,直至test类的data属性大于5时停止迭代。
3、如何使用迭代器?
Python提供的iter()函数可以从可迭代对象中获得该对象的迭代器,然后使用迭代器的next方法获取对象。因为迭代器在迭代完所有对象成员后,会引发StopIteration异常,因此需要把迭代代码放入到try-except块中(异常处理语句,在后面的章节会有详细介绍)。
例1:查找一个词是否在给出的词组中。
词组是多个词的组合,在词组中查找一个词,查找的词为查询词。最好的处理方法就是遍历整个词组,依次与查询词进行匹配,匹配成功说明查询词出现在词组中。程序流程图如下:
图1 词查询流程图
程序一开始先用列表初始化词组,然后要求用户输入查询词,再使用迭代器迭代词组列表,在词组列表的迭代过程中,获取每个词对象,并与查询词进行匹配。若匹配成功,输出匹配成功信息并执行break语句跳出迭代,程序结束;若匹配失败则进入下一轮迭代。当迭代全部结束后,说明词组中没有与查询词相匹配的词,输出匹配失败信息,程序结束。下面给出例1的程序代码。
在Python语言,判断两字符串是否相等,可以使用“==”比较运算符进行判断,也可以使用“in”成员运算符进行判断,这两种运算符都返回布尔值,可以用在if表达式中。“==”比较运算符主要用于判断两个字符串的内容是否相等;“in”成员运算符主要用于判断两个字符串的内存地址是否相等。
try-except是Python的异常处理语句,当需要Python捕获异常代码时,需要把认为可能会出现异常的代码包括在try语句块中,在程序执行时,如果try内语句发生错误就会抛出异常,except语句会捕获异常,except语句块内的代码将会被执行,这样就可以处理异常错误了。因为迭代器在迭代完所有对象成员后,会引发StopIteration异常,因此需要把迭代代码放入到try-except块中。
上面代码的功能也可以使用for循环实现,使用for循环对词组进行迭代,操作上更为简单方便。
在for……in……循环中,序列对象列表会自动产生迭代器,并自动调用迭代器的next方法,因此不需要处理try-except语句。
例2:用字典实现图书信息表,并能通过图书的ISBN号查询到图书信息。
每本图书都有唯一的ISBN号,可以把图书的ISBN号作为图书信息表的唯一标识。题目要求用字典来实现,字典分为key和value两部分,key为键,value为键的属性,key和value是一一对应的关系。图书的ISBN可以作为字典的key,图书的其它信息可以作为字典的value,图书的其它信息包括图书名称、作者、出版社、价格,字典的value可以用Python列表来实现。程序流程图如下:
图 2 图书信息查询流程图
程序一开始先初始化图书信息字典,字典的key为图书的ISBN号,字典的value为图书的名称、作者、出版社、价格信息,value为Python列表对象。然后要求用户输入图书的ISBN号,再使用迭代器遍历字典的key,在遍历字典key的过程中,如果输入的ISBN与key匹配,则输出图书信息并执行break语句跳出迭代,程序结束。当迭代全部完成后,输出匹配失败信息,程序结束。下面给出例2的程序代码。
使用Python提供的iter函数获取字典key的迭代器,在字典key的迭代过程中,next函数返回key的值。bookDic使用“[]”访问运算符可以把key作为索引获取字典的value。
python迭代器_使用Python的迭代器遍历可迭代对象相关推荐
- python3迭代器和可迭代对象_一文读懂 Python3 可迭代对象、迭代器、生成器区别...
笔者学习Python已有一段时间,一直以为对于可迭代对象(iterable).迭代器(iterator).生成器(generator)有一定理解了,直到看到<流畅的python>中的讲解才 ...
- python 遍历可迭代对象的方法
python 遍历可迭代对象的方法 可迭代(iterable) 迭代(遍历)就是按照某种顺序逐个访问对象中的每一项. Python中有很多对象都是可以通过for语句来直接遍历的,例如list.stri ...
- 第一章 第一节:Python基础_认识Python
Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...
- python中常用的内置函数,可迭代对象,迭代器对象
知识点1 :常用内置函数 1 常用内置函数的实际应用 1.1 abs() 返回值是一个绝对值,参数可以是整数和浮点数,如果参数是一个复数,则返回它的模. print(abs(-12.3)) # 12. ...
- python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...
复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象----> 延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...
- 黑马程序员python笔记_三年Python程序员平时学习笔记总结,对于学习Python非常有帮助...
一.可迭代对象.迭代器对象和生成器 像list, tuple等这些序列是可以使用for...in ...语句来进行遍历输出的.这是为什么呢?这就需要知道可迭代对象(Iterable).迭代器对象(It ...
- effective python怎么样_【Python】《Effective Python》 读书笔记 (一)
# -*- coding: utf-8 -*- from datetime import datetime from time import sleep from urllib.parse impor ...
- python范例_最佳Python代码范例
python范例 Python is a general purpose programming language which is dynamically typed, interpreted, a ...
- python大牛_成为Python大牛必须要掌握的高端语法——yield
成为Python大牛必须要掌握的高端语法--yield 1. 什么是yield 在介绍yield语法之前,首先要向大家说明Python中的迭代(iteration).可迭代(iterable).迭代器 ...
最新文章
- Study on Android【四】--显示控件使用
- linux开启远程访问端口
- javascript 学习笔记(四) 倒计时程序
- (小白)函数一: 声明函数的方法—语句定义法和表达式定义法的区别
- html div 子元素 过多 卡顿,CSS不定高元素transition动画的解决方案
- JAVA 从菜鸟成长为大牛的必经之路
- 又一个手机圈大佬确认离职!网友:圈内再无万瓷王
- Spring Cloud Bus消息总线(学习总结)
- ET1100和ET1200的区别
- STM32F10x_StdPeriph_Template
- 面试手写代码的经验分享
- 研究开源的C++的RTB广告系统,通过centos7镜像,解决各种环境问题,使用boost库
- 由某梦CMS导致近来改版的太多数据库大挪移手软了
- 半年时间破获电信诈骗大案:我是如何利用数据分析建模,从零基础做到的
- 苹果小白笔记本_【电脑】外媒评选年度办公/学生笔记本榜单 快看有你需要的吗...
- rtx服务器设置 文件,rtx 客户端 服务器设置 配置文件
- 1 Robotics: Aerial Robotics 第3+4周 课程学习记录及课后习题解答
- 字节跳动人事大调整,“接班”张一鸣的为什么是他?
- Draw.io--一款强大且支持在线编辑和导出的流程图绘制软件
- C++买卖股票的最佳时机(股票买卖大合集)
热门文章
- hiveserver2启动不起来_汽车一键启动只能用来打火吗 车主必须知道的几个“隐藏”技巧!...
- c语言程序设计基础的考试题,c语言程序设计基础的考试题.doc
- php数组超索引,php数组多维索引
- qt获取窗口的右上角位置_智能座舱QT应用实例 -- Mode/View
- 使用linux集体升级系统,一:Linux系统的升级
- python dataframe遍历_在pandas中遍历DataFrame行的实现方法
- hadoop合并日志_【hadoop】24.MapReduce-shuffle之合并
- android ndk 编译选项,Android NDK 对于c++的支持(mk文件内编译选项)
- html中如何华直角坐标系,空间直角坐标系的画法..ppt
- wampserver 调试 php,phpstrom+wampserver+xdebug配置