如何解决循环跳过多个迭代
for
用于iter(song)
循环;您可以在自己的代码中执行此操作,然后在循环内推进迭代器;iter()
再次调用iterable只会返回相同的iterable对象,因此您可以for
在下一次迭代中紧跟着在循环内推进iterable
。
通过next()
函数推进迭代器;
它可以在Python 2和3中正常工作,而无需调整语法:
song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
song_iter = iter(song)
for sing in song_iter:
print sing
if sing == 'look':
next(song_iter)
next(song_iter)
next(song_iter)
print 'a' + next(song_iter)
通过提高print sing
阵容,我们也可以避免重复自己。
如果可迭代的值超出范围,则使用next()
这种方法 会 引发stopiteration
异常。
您可以捕获该异常,但是提供next()
第二个参数(忽略该异常并返回默认值的默认值)会更容易:
song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
song_iter = iter(song)
for sing in song_iter:
print sing
if sing == 'look':
next(song_iter, None)
next(song_iter, None)
next(song_iter, None)
print 'a' + next(song_iter, '')
我通常会itertools.islice()
跳过3个元素;保存重复的next()
呼叫:
from itertools import islice
song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
song_iter = iter(song)
for sing in song_iter:
print sing
if sing == 'look':
print 'a' + next(islice(song_iter, 3, 4), '')
该islice(song_iter, 3,
4)
迭代将跳过3个元素,然后返回4,然后来完成。next()
因此,调用该对象会从中检索第4个元素song_iter()
。
演示:
>>> from itertools import islice
>>> song = ['always', 'look', 'on', 'the', 'bright', 'side', 'of', 'life']
>>> song_iter = iter(song)
>>> for sing in song_iter:
... print sing
... if sing == 'look':
... print 'a' + next(islice(song_iter, 3, 4), '')
...
always
look
aside
of
life
解决方法
我有一个循环列表,look
到达后我想跳过3个元素。在此答案中,提出了一些建议,但我未能充分利用它们:
song = ['always','look','on','the','bright','side','of','life']
for sing in song:
if sing == 'look':
print sing
continue
continue
continue
continue
print 'a' + sing
print sing
四次continue
当然是胡说八道,而四次next()
是行不通的。
输出应如下所示:
always
look
aside
of
life
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。