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中文網其他相關文章!