擅长:python、mysql、java
<p>为了满足以下条件:原地修改原始列表,不复制列表,只执行一次操作,<strong>有效</strong>,传统的解决方案是向后迭代<em></em>:</p>
<pre><code>for i in xrange(len(somelist) - 1, -1, -1):
element = somelist[i]
do_action(element)
if check(element):
del somelist[i]
</code></pre>
<p>奖励:不会在每次迭代中执行<code>len(somelist)</code>。适用于任何版本的Python(至少可以追溯到1.5.2)。。。s/X范围/范围/对于3.X</p>
<p>更新:如果你想迭代<em>向前</em>,这是可能的,只是更复杂和丑陋:</p>
<pre><code>i = 0
n = len(somelist)
while i < n:
element = somelist[i]
do_action(element)
if check(element):
del somelist[i]
n = n - 1
else:
i = i + 1
</code></pre>