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