擅长:python、mysql、java
<p>这个<a href="https://stackoverflow.com/questions/17299581/loop-forgets-to-remove-some-items">question</a>很好地解决了这个问题,但简而言之:</p>
<p>即使您没有通过元素的索引显式地循环列表,Python还是会在内部为您完成这项工作。你知道吗</p>
<p>就好像你写了这样的东西:</p>
<pre><code>l = listdir(".")
while i < len(l):
name = l[i]
if 'lp' in name:
l.remove(name)
# Now evaluating l[i] yields another element, even though i was not incremented !
i = i + 1
</code></pre>
<p>因此,当您在迭代过程中移除一个元素时,它会将循环指针移动一次太多,这就是您观察到的问题。你知道吗</p>
<p>请注意,在您的情况下,您可以只写:</p>
<pre><code>from os import listdir
def getfilename():
return [x for x in listdir(".") if not 'lp' in x]
</code></pre>
<p>尽管名称<code>getfilename</code>有点奇怪,但它实际上返回了一个列表。。。但这是另一个问题。你知道吗</p>