<p><code>for</code>使用<code>iter(song)</code>循环;您可以在自己的代码中执行此操作,然后在循环内推进迭代器;再次调用iterable上的<code>iter()</code>将只返回相同的iterable对象,这样您就可以在循环内推进iterable,并在下一次迭代中继续执行<code>for</code>。</p>
<p>使用<a href="http://docs.python.org/2/library/functions.html#next" rel="noreferrer">^{<cd5>} function</a>推进迭代器;它在Python 2和3中都能正常工作,而无需调整语法:</p>
<pre><code>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)
</code></pre>
<p>通过移动<code>print sing</code>行,我们可以避免重复自己。</p>
<p>使用<code>next()</code>这样,如果iterable超出值,则<em>可以引发<code>StopIteration</code>异常。</p>
<p>您可以捕获该异常,但给<code>next()</code>第二个参数(忽略该异常并返回默认值的默认值)会更容易:</p>
<pre><code>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, '')
</code></pre>
<p>我将使用<a href="http://docs.python.org/2/library/itertools.html#itertools.islice" rel="noreferrer">^{<cd10>}</a>跳过3个元素;保存重复的<code>next()</code>调用:</p>
<pre><code>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), '')
</code></pre>
<p>表将跳过3个元素,然后返回第4个元素,然后完成。对该对象调用<code>next()</code>,从而从<code>song_iter()</code>检索第4个元素。</p>
<p>演示:</p>
<pre><code>>>> 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
</code></pre>