Python的点滴笔记之:迭代器
博客专区 > fzyz_sb 的博客 > 博客详情
Python的点滴笔记之:迭代器
fzyz_sb 发表于3年前
Python的点滴笔记之:迭代器
  • 发表于 3年前
  • 阅读 46
  • 收藏 1
  • 点赞 0
  • 评论 0
摘要: 迭代器的各种问题汇总

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.



共有 人打赏支持
粉丝 365
博文 209
码字总数 447144
×
fzyz_sb
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: