2015-03-02 42 views
0

我有最簡單的循環來從列表中刪除項目,並且當我遍歷列表項目並打印它們時,它按預期工作。然而,當我嘗試使用內置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] 

這到底是怎麼回事?我的清單不應該是空的嗎?

編輯:我不認爲我爲什麼會出現這個問題的具體問題的答案已被回答。我的問題是問爲什麼這個行爲正在經歷,而其他相關的問題是如何正確地遍歷一個循環。我覺得在這裏有一些東西需要學習,新手程序員在閱讀相關問題時可能不會理解。如果有一個問題可以證明我在答案中寫了什麼,那麼通過一切手段將其標記爲重複。

+0

使用這樣的迭代器時,您不應該從數據結構中移除元素。雖然這不會在Python中引發運行時錯誤,但某些語言甚至不會允許這種行爲。 – JNYRanger 2015-03-02 20:23:44

+0

正如我剛剛發現的,還有其他很好的理由不這樣做。我在下面的答案中解釋。 – LegendaryDude 2015-03-02 20:25:09

回答

1

我犯了一個邏輯錯誤。當我的循環刪除列表中的第一個條目時,第二個條目從2移動到索引1,第三個條目從3移動到索引2.因爲'2'現在位於列表的索引1中,所以它沒有得到因爲循環已經從列表的索引1傳遞過去了。

+0

抱歉在發佈後立即回答我自己的問題 - 一旦我點擊提交,意外結果的原因就會顯現。 – LegendaryDude 2015-03-02 20:23:52

+0

沒關係。如果別人面臨同樣的問題,這很好。給他們一些簡單的檢查。我可以建議你接受你自己的答案嗎? – 2015-03-02 20:55:42

+1

我會的,但我需要等2天才能這樣做。 – LegendaryDude 2015-03-02 21:13:30