<p>使用<a href="http://docs.python.org/3.3/library/functions.html#enumerate" rel="nofollow noreferrer">the ^{<cd1>} built-in</a>:</p>
<pre><code>>>> list(enumerate([5, 15, 15]))
[(0, 5), (1, 15), (2, 15)]
</code></pre>
<p>原始代码的错误在于您在循环中使用了<code>x</code>,但是,<code>x</code>在该循环中没有改变,它只是从您打印值的前一个循环中留在那里。在</p>
<p>然而,这种方法是不好的。修复它需要按索引循环,而Python并不是这样设计的-它很慢而且很难阅读。相反,我们按值循环。内置的<code>enumerate()</code>可以为我们完成这项工作,因为这是一项相当常见的任务。在</p>
<p>如果您真的不想使用<code>enumerate()</code>(这根本没有意义,但可能作为一种任意的限制,试图教您一些其他的东西),那么还有更好的方法:</p>
^{pr2}$
<p>这里我们使用<a href="http://docs.python.org/3.3/library/functions.html#zip" rel="nofollow noreferrer">^{<cd6>}</a>,这是一个python函数,用于同时循环两组数据。这将从每个iterable返回第一个值的元组,然后从每个iterable返回第二个值,等等。。。当与<a href="http://docs.python.org/3.3/library/itertools.html#itertools.count" rel="nofollow noreferrer">^{<cd7>}</a>结合时,这就给了我们想要的结果,它在tin上做了它所说的。在</p>
<p>如果你真的觉得需要手动构建一个列表,那么更像Python的方式来做一些不太和谐的事情:</p>
<pre><code>enumerated_list = []
count = 0
for item in data:
enumerated_list.append((count, item))
count += 1
</code></pre>
<p>不过,请注意,一般情况下,人们会使用<a href="http://www.youtube.com/watch?v=pShL9DCSIUw" rel="nofollow noreferrer">list comprehension</a>来构建这样的列表—在这种情况下,一旦这样做了,使用前面的方法之一会更有意义。这种单子的制作效率低下,而且很难阅读。在</p>