从列表中删除项目时循环不正确
迭代列表并删除循环内的项目时,您可能会遇到意外行为。考虑以下代码:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
print(letters)
此代码不会按预期删除所有项目,而是产生以下输出:
['b', 'd', 'f', 'h', 'j', 'l']
Python 文档解释了这种看似奇怪的行为:
[I]修改序列是不安全的在循环中迭代。如果您需要修改正在迭代的列表,则必须迭代一个副本。
在这种特定情况下,迭代变量 i 在删除一个项目后得到更新,导致下一个项目的索引要跳过的循环。
重写以实现准确的项目删除
要纠正此行为,您应该迭代列表或使用替代方法删除项目。这里有三个选项:
del letters[:]
letters[:] = []
letters = []
或者,如果您需要根据条件删除特定项目,您可以可以使用推导式或 filter() 函数过滤列表:
letters = [letter for letter in letters if letter not in ['a', 'c', 'e', 'g', 'i', 'k']]
letters = list(filter(lambda letter: letter not in ['a', 'c', 'e', 'g', 'i', 'k'], letters))
通过遵循这些准则,您可以确保从 Python 中的列表中准确高效地删除项目。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3