迭代列表時從列表中刪除
迭代列表並刪除元素時,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 在迭代過程中處理可變序列的方式的結果。當呼叫remove時,底層列表被修改。然而,迭代器保持不變,並繼續遍歷修改後的清單。
下圖說明了刪除過程:
[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 清單中刪除元素會產生意外結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!