Python 列表:迭代期间删除项目的陷阱
迭代 Python 列表同时删除项目可能会导致意外行为。一个值得注意的示例如下:
<code class="python">letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l'] for i in letters: letters.remove(i)</code>
令人费解的是,字母的最终打印显示只有所有其他项目已被删除。
异常的原因
此行为源于 Python 在迭代期间处理可迭代对象修改的方式。文档明确指出,修改正在迭代的序列通常是不安全的,尤其是对于列表等可变类型。
这种做法可能会导致未定义的行为以及未来 Python 构建中的潜在更改。
删除所有项目的正确方法
要安全地从列表中删除所有项目,请使用以下任一方法:
处理有条件的项目删除
要有条件地删除项目,请创建使用 [:] 切片语法列出:
<code class="python">commands = ["ls", "cd", "rm -rf /"] for cmd in commands[:]: if "rm " in cmd: commands.remove(cmd)</code>
或者,使用过滤功能排除不需要的项目:
<code class="python">commands = [cmd for cmd in commands if not is_malicious(cmd)]</code>
以上是迭代 Python 列表时,为什么应该避免删除项目?的详细内容。更多信息请关注PHP中文网其他相关文章!