擅长:python、mysql、java
<p>您正在从<code>budg</code><em>中移除元素,同时在其上循环</em>。执行此操作时,<code>for</code>循环迭代器不会更新其索引:</p>
<pre><code>>>> lst = [1, 2, 3]
>>> for i in lst:
... print i
... lst.remove(i)
...
1
3
</code></pre>
<p>这里跳过了<code>2</code>,因为迭代器首先处理<code>lst[0]</code>,然后移到<code>lst[1]</code>,此时它来自一个包含<code>[2, 3]</code>的列表,而不是<code>[1, 2, 3]</code>。你知道吗</p>
<p>改用<code>while</code>循环:</p>
<pre><code>i = 0
while i < len(budg):
e = budg[i]
record = 'KELOG_GEO_' + e.split(None, 1)[0][11:]
if record not in geolist:
removed.append(budg.pop(i))
else:
i += 1
</code></pre>
<p>现在您可以直接控制正在处理的索引,并且只在<em>而不是</em>删除元素时增加<code>i</code>。你知道吗</p>