从列表中删除项目时循环不正确
迭代列表并删除循环中的项目时,您可能会遇到意外行为。考虑以下代码:
<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] for i in letters: letters.remove(i) print(letters)</code>
此代码不会按预期删除所有项目,而是会产生以下输出:
['b', 'd', 'f', 'h', 'j', 'l']
Python 文档解释了这种看似奇怪的行为:
[I]修改循环中迭代的序列是不安全的。如果您需要修改正在迭代的列表,则必须迭代副本。
在这种特定情况下,迭代变量 i 在删除一个项目后更新,导致下一个项目的索引要跳过的循环。
重写以准确删除项目
要纠正此行为,您应该迭代列表的副本或使用替代方法来删除项目。这里有三个选项:
<code class="python">del letters[:]</code>
<code class="python">letters[:] = []</code>
<code class="python">letters = []</code>
或者,如果您需要删除特定基于条件的项目,您可以使用推导式或 filter() 函数过滤列表:
<code class="python">letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]</code>
<code class="python">letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))</code>
通过遵循这些准则,您可以确保从 Python 列表中准确高效地删除项目.
以上是使用循环从列表中删除项目时如何处理意外行为?的详细内容。更多信息请关注PHP中文网其他相关文章!