什么是迭代器?它是一个带状态的对象,在你调用next()方法的时候返回容器中的下一个值,任何实现了__iter____next__()(python2中实现next())方法的对象都是迭代器,__iter__返回迭代器自身,__next__返回容器中的下一个值,如果容器中没有更多元素了,则抛出StopIteration异常。

可迭代对象实现了__iter__方法,该方法返回一个迭代器对象

 例1:

 例2:

已知列表namelist = ['王源','贾玲','沈腾','欧阳娜娜','邓超','陈赫','鹿晗','郑凯','王祖蓝','Angelababy','李晨'],删除列表removelist = ['王源','贾玲','沈腾','欧阳娜娜','宋小宝'],要求将removelist列表中的每个元素从namelist中移除(属于removelist,但不属于namelist的忽略即可)

错误解答

#!/usr/bin/env python
namelist = ['王源','贾玲','沈腾','欧阳娜娜','邓超','陈赫','鹿晗','郑凯','王祖蓝','Angelababy','李晨']
removelist = ['王源','贾玲','沈腾','欧阳娜娜','宋小宝'] for name in namelist:
if name in removelist:
namelist.remove(name)
print(namelist)

执行结果:

以上并不是我们想要的结果,编辑代码,测试查看代码执行过程:

#!/usr/bin/env python
namelist = ['王源','贾玲','沈腾','欧阳娜娜','邓超','陈赫','鹿晗','郑凯','王祖蓝','Angelababy','李晨']
removelist = ['王源','贾玲','沈腾','欧阳娜娜','宋小宝'] for name in namelist:
print(name)
if name in removelist:
print(name)
namelist.remove(name)
print(namelist)

执行结果:

从以上执行过程我们看到,for序列循环只匹配到了’王源‘、’沈腾‘,这个是为什么呢。

其实上述结果是由于序列namelist是可迭代对象,执行for循环是按列表顺序依次匹配。题中列表第一个元素’王源‘第一次就匹配,然后执行代码块remove操作,从原列表namelist删除元素’王源‘。

注:此时列表更新为

 ['贾玲', '沈腾', '欧阳娜娜', '邓超', '陈赫', '鹿晗', '郑凯', '王祖蓝', 'Angelababy', '李晨'] ,此时进入第二次for循环,执行__next__返回的是列表中的下一个值'沈腾',列表首个元素'贾玲'被忽略了。如此循环直到容器中没有更多元素,则Stop,不会再循环。

正确解答:

 #!/usr/bin/env python
namelist = ['王源','贾玲','沈腾','欧阳娜娜','邓超','陈赫','鹿晗','郑凯','王祖蓝','Angelababy','李晨']
removelist = ['王源','贾玲','沈腾','欧阳娜娜','宋小宝'] for name in removelist:
print(name)
if name in namelist:
namelist.remove(name)
print(namelist)

执行结果:

从列表和实例来了解python迭代器的更多相关文章

  1. python迭代器与iter()函数实例教程

    python迭代器与iter()函数实例教程 发布时间:2014-07-16编辑:脚本学堂 本文介绍了python迭代器与iter()函数的用法,Python 的迭代无缝地支持序列对象,而且它还允许程 ...

  2. Python 迭代器和列表解析

    Python 迭代器和列表解析 1)迭代器 一种特殊的数据结构,以对象形式存在 >>> i1 = l1.__iter__() >>> i1 = iter(l1) 可 ...

  3. 3、Python迭代器、列表解析及生成器(0530)

    1.动态语言 sys.getrefcount()    //查看对象的引用计数 增加对象的引用计数场景 对象创建时:以赋值的方式,创建变量名的同时就会创建变量 将对象添加进容器时:类似list.app ...

  4. Python中对列表排序实例

    Python中对列表排序实例 发布时间:2015-01-04 09:01:50 投稿:junjie 这篇文章主要介绍了Python中对列表排序实例,本文给出了9个List的排序实例,需要的朋友可以参考 ...

  5. Python编程之列表操作实例详解【创建、使用、更新、删除】

    Python编程之列表操作实例详解[创建.使用.更新.删除] 这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋 ...

  6. Python - 迭代器与生成器 - 第十三天

    Python 迭代器与生成器 迭代器 迭代是Python最强大的功能之一,是访问集合元素的一种方式. 迭代器是一个可以记住遍历的位置的对象. 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问 ...

  7. Python迭代器,可迭代对象,生成器

    迭代器 迭代器(iterator)有时又称游标(cursor)是程式设计的软件设计模式,可在容器物件(container,例如链表或阵列)上遍访的界面,设计人员无需关心容器物件的内存分配的实现细节. ...

  8. python迭代器生成器(二)

    其他内置类型迭代器 除了文件以及列表这样的实际的序列外,其他类型也有适合的迭代器. 遍历字典的经典方法是明确的获取其键的列表. 在最近的python版本中,字典有一个迭代器,在迭代环境中,会自动一次返 ...

  9. Python迭代器,生成器--精华中的精华

    1. 迭代器 迭代器是访问集合元素的一种方式.迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束.迭代器只能往前不会后退,不过这也没什么,因为人们很少在迭代途中往后退.另外,迭代器的一大 ...

随机推荐

  1. CSS 基础:CSS 工作原理(2)<思维导图>

    这段时间利用一下间隙时间学习了CSS的基础知识,主要目的是加深对CSS的理解,虽然个人主要工作基本都是后台开发,但是个人觉得系统学习一下CSS的基础还是很有必要的.下面我学习CSS时做的思维导图(全屏 ...

  2. jQgrid学习笔记

    jQgrid学习笔记

  3. 记录线上与本地docker镜像一致,但Dockerfile却构建失败的问题

    背景 公司新开了某个项目,我在新的服务器部署了docker环境,本着ctrl+c 和ctrl+v的惯例,直接把以前的php环境的Dockerfile文件直接复制到新项目服务器那里,结果构建失败,失败的 ...

  4. 浅谈Java泛型中的? extends E和?super E

    https://blog.csdn.net/zymx14/article/details/78073757

  5. Jmeter - 测试 http 接口

    前言: 本文主要针对http接口进行测试,使用Jmeter工具实现. Jmter工具设计之初是用于做性能测试的,它在实现对各种接口的调用方面已经做的比较成熟,因此,本次直接使用Jmeter工具来完成对 ...

  6. windows7安装flask-mysqldb遇到的坑

    最近在windows环境上搭建flask使用环境,遇到过很多坑,这次就记录下安装flask-mysqldb所遇到的坑. 正常逻辑是使用pip install flask-mysqldb进行安装.但是会 ...

  7. [USACO13DEC] Optimal Milking

    Description n个点排成一排,点有点权,要求支持两种操作: 修改某个点的点权 询问取出任意多且不相邻的点的点权和最大值 Solution 跟最大子段和一样,可以用分治做,用线段树记录一下左右 ...

  8. oracle 外连接以及用on和where 的区别

    Oracle  外连接(OUTER JOIN)包括以下: 左外连接(左边的表不加限制) 右外连接(右边的表不加限制) 全外连接(左右两表都不加限制) 对应SQL:LEFT/RIGHT/FULL OUT ...

  9. c# 生成自定义图片

    using System.Drawing; using System.IO; using System.Drawing.Imaging; using System; namespace treads ...

  10. sort、sorted高级排序-Python3.7 And 算法<七>

    1.sort(*, key=None, reverse=False) sort()接受两个参数,这两个参数只能通过关键字(关键字参数)传递. 参数key:带一个参数的函数(排序时,会依次传入列表的每一 ...