擅长:python、mysql、java
<p>问题是<code>for i in list_in</code>在列表中产生<em>项</em>,而不是<em>索引</em>。要获取索引,请使用<code>enumerate</code>:</p>
<pre><code>for i, val in enumerate(list_in):
if i % 2 == 0:
list_in[i] = val * 2
...
</code></pre>
<p>如果您想返回一个<em>新的</em>列表(而不是对旧列表进行变异),那么使用条件表达式的列表理解可以很好地实现:</p>
<pre><code>[val * 3 if val % 2 else val * 2 for val in list_in]
</code></pre>
<p>当然,如果您真的需要,您可以将它与切片分配一起使用来变异<code>list_in</code>:</p>
<pre><code>list_in[:] = [val * 3 if val % 2 else val * 2 for val in list_in]
</code></pre>
<hr/>
<p><sup>作为一种风格,如果函数的目的是就地修改列表,则不要返回列表。这就清楚地表明,输入是经过变异的,而不是返回一个以某种方式根据原始数据构建的新列表。</sup></p>