這是一個簡單的問題。我的任務是循環列表並打印每個元素。每次打印後,我打算從列表中刪除此元素。我的代碼是:Python:在循環列表中刪除列表中的元素
>> a = [1,2]
>> for x in a:
>> print x
>> a.remove(x)
>> print a
輸出是:
>> 1
>> [2]
然而,奇怪的事情發生在這裏: 只有1已經打印,它從列表中刪除1日後看來,程序跳出了直接循環。我的假設是在更改列表的內容之後,迭代器可能也會受到影響,但我不太確定。更安全的方法是:
>> a = [1,2]
>> b = list(a)
>> for x in b:
>> print x
>> a.remove(x)
>> print a
有人可以請給我任何更高級的解釋嗎?
迭代器跟蹤位置,是的。但是,爲什麼你會去除每個元素?你最終會得到一個空的列表。 – jonatan
'b = list(a)'創建列表的副本,所以'a'和'b'成爲不同的對象。 [This](https://jeffknupp.com/blog/2012/11/13/is-python-callbyvalue-or-callbyreference-neither/)可能會有用。 – roganjosh
[此答案](https://stackoverflow.com/a/34238688/8747)有一個體面的解釋。 –