Python 列表:迭代期间删除项目的陷阱
迭代 Python 列表,同时删除项目可能会导致意外行为。一个值得注意的例子如下:
letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l']
for i in letters:
letters.remove(i)
令人费解的是,字母的最终打印显示只有所有其他项目已被删除。
异常的原因
此行为源于 Python 在迭代期间处理对可迭代对象的修改的方式。文档明确指出,修改正在迭代的序列通常是不安全的,尤其是对于列表等可变类型。
这种做法可能会导致未来 Python 版本中出现未定义的行为和潜在的更改。
删除所有项目的正确方法
要安全地从列表中删除所有项目,请使用以下任一方法:
处理有条件项目删除
要有条件删除项目,请创建使用 [:] 切片语法列出:
commands = ["ls", "cd", "rm -rf /"]
for cmd in commands[:]:
if "rm " in cmd:
commands.remove(cmd)
或者,使用过滤功能排除不需要的项目:
commands = [cmd for cmd in commands if not is_malicious(cmd)]
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3