用于使用iter(song)循环;你可以在你自己的代码中做这件事,然后在循环中推进迭代器;在iterable上再次调用iter()只会返回相同的可迭代对象,因此您可以在循环中推进iterable,以便在下一个迭代中正确执行。
使用next() function提前迭代器;它在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)
通过移动打印唱排,我们可以避免重复自己。
使用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)iterable将跳过3个元素,然后返回第4,然后完成。在该对象上调用next()从而从song_iter()中检索第4个元素。
演示:
>>> 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