文档章节

Python的点滴笔记之:迭代器

fzyz_sb
 fzyz_sb
发布于 2015/02/24 13:28
字数 290
阅读 55
收藏 1

1. 在for/while循环中,不要直接对序列进行更改

    一般情况下,我们都会对一个序列进行迭代输出.但是存在一种情况是:如果我们在for循环中对序列直接进行修改,那么我们应该注意什么?

    这时候,一般是为for循环提供一个序列的副本进行操作,从而不会产生死循环:

>>> words = ['cat', 'window', 'defenestrate']
>>> for w in words[:]:
	if len(w) > 6:
		words.insert(0, w)

		
>>> words
['defenestrate', 'cat', 'window', 'defenestrate']
    如果我们使用words,而非其副本words[:](切片产生新对象),那么终究会产生死循环.为什么会产生死循环,从以下代码可以看出:

>>> words = ['cat', 'window', 'defenestrate']
>>> i = 1
>>> for w in words:
	if len(w) > 6:
		ss = "%s %d" % (w, i)
		i += 1
		words.insert(0, ss)
	if len(words) > 6:
		break

	
>>> words
['defenestrate 4', 'defenestrate 3', 'defenestrate 2', 'defenestrate 1', 'cat', 'window', 'defenestrate']
    这里,我们会发现,死循环在:

if len(w) > 6:



产生.即我们insert进去后,迭代器w会保持原索引,但是words的长度增加了1,所以w的值会一直为defenestrate.



© 著作权归作者所有

共有 人打赏支持
fzyz_sb
粉丝 408
博文 209
码字总数 447144
作品 0
武汉
程序员
程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

后台回复关键词 思维导图 可获取本文中的高清思维导图(PDF版) ML & AI∣一个有用的公众号 长按,识别二维码,加关注 获取更多精彩文章

micf435p6d221ssdld2
05/23
0
0
更深入的理解 Python 中的迭代

深入探讨 Python 的 循环来看看它们在底层如何工作,以及为什么它们会按照它们的方式工作。 Python 的 循环不会像其他语言中的 循环那样工作。在这篇文章中,我们将深入探讨 Python 的 循环来...

01%
05/26
0
0
Python 2 和 Python 3 有哪些主要区别?

语法 print不再是语句,而是函数,比如原来是 print 'abc' 现在是 print('abc') 但是 python2.6+ 可以使用 from future import print_function 来实现相同功能 在Python 3中,没有旧式类,只...

cooffeelis
03/05
0
0
Python3+迭代器与生成器

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

xinet
2017/08/12
0
0
关于Python中的yield

在介绍yield前有必要先说明下Python中的迭代器(iterator)和生成器(constructor)。 一、迭代器(iterator) 在Python中,for循环可以用于Python中的任何类型,包括列表、元祖等等,实...

劲风online
2015/07/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.X部署Zabbix4.0

  /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p 密码 数据库导入完成后需要个Zabbix配置数据库密码,修改/etc/zabbix/zabbix_server.conf文件:   DBPassword......

寰宇01
3分钟前
0
0
工厂模式

(从别人里copy的,方便自己查看) 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决:主要解决接口选择的问题。 何时使...

南桥北木
30分钟前
0
0
rabbitmq学习(一)

RabbitMQ是目前非常热门的一款消息中间件,具有高可靠、易拓展、高可用及丰富的功能 1.什么是消息中间件 消息是指在应用间传送的数据。包含文本字符串、JSON、内嵌对象 消息队列中间件(消息...

hensemlee
33分钟前
1
0
学习设计模式——原型模式

1. 认识原型模式 1. 定义:用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。 2. 结构: Prototype:声明一个克隆自身的接口,用来约束想要克隆自己的具体实现类,要求这些类...

江左煤郎
39分钟前
1
0
观察者模式

观察者模式的套路 有如下角色: 事件,比如修改,用户点击; 事件队列,触发事件之后,会把事件一个一个放入事件队列 监听器,采用某种方式(一般是轮询,或者io阻塞机制),来判断事件队列是否有新的未...

黄威
42分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部