我有最簡單的循環來從列表中刪除項目,並且當我遍歷列表項目並打印它們時,它按預期工作。然而,當我嘗試使用內置remove()
(list.remove(x)
)我得到意想不到的結果:Python - 爲什麼這個循環從列表中刪除項目而不是從列表中刪除所有項目?
>>> data = [1, 2, 3, 4, 5]
>>> for i in data:
print(i)
1
2
3
4
5
>>> for i in data:
data.remove(i)
>>>> data
[2, 4]
這到底是怎麼回事?我的清單不應該是空的嗎?
編輯:我不認爲我爲什麼會出現這個問題的具體問題的答案已被回答。我的問題是問爲什麼這個行爲正在經歷,而其他相關的問題是如何正確地遍歷一個循環。我覺得在這裏有一些東西需要學習,新手程序員在閱讀相關問題時可能不會理解。如果有一個問題可以證明我在答案中寫了什麼,那麼通過一切手段將其標記爲重複。
使用這樣的迭代器時,您不應該從數據結構中移除元素。雖然這不會在Python中引發運行時錯誤,但某些語言甚至不會允許這種行爲。 – JNYRanger 2015-03-02 20:23:44
正如我剛剛發現的,還有其他很好的理由不這樣做。我在下面的答案中解釋。 – LegendaryDude 2015-03-02 20:25:09