了解 Python 迭代期間的列表刪除
迭代列表時,可能需要刪除元素。但是,如果刪除處理不當,這樣做可能會導致意外行為。
考慮Python 程式碼:
a = list(range(10)) remove = False for b in a: if remove: a.remove(b) remove = not remove print(a)
此程式碼產生輸出[0, 2, 3, 5 , 6, 8, 9],而非預期的[0, 2, 4, 6, 8]。出現此異常的原因是 Python 在迭代時處理可變物件的方式。
問題的可視化解釋
操作順序可以可視化如下:
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | b = 0; remove? no ^ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] | b = 1; remove? yes ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] | b = 3; remove? no ^ [0, 2, 3, 4, 5, 6, 7, 8, 9] | b = 4; remove? yes ^ [0, 2, 3, 5, 6, 7, 8, 9] | b = 6; remove? no ^ [0, 2, 3, 5, 6, 7, 8, 9] | b = 7; remove? yes ^ [0, 2, 3, 5, 6, 8, 9] | b = 9; remove? no ^
沒有錯誤指示
沒有錯誤指示
沒有錯誤指示
沒有錯誤指示
沒有錯誤指示沒有錯誤指示沒有錯誤指示沒有錯誤指示當底層迭代器被修改時,Python不會發出錯誤,因為確定突變何時以及如何影響迭代器需要大量的運行時分析,從而顯著減慢執行速度。 行為一致性此範例中所述的行為在不同版本的 Python 中保持一致,確保可預測執行在迭代期間修改可變物件的程式碼。以上是為什麼在迭代期間從 Python 列表中刪除元素會導致意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!