我沒有想到這會起作用,因爲我修改了正在迭代的對象,但我沒有想到它會以這種方式失敗。我實際上預計會有一個例外被提出。迭代列表時發生意外的行爲
>>> x = [1, 2, 3]
>>> for a in x:
... print a, x.pop(0)
...
1 1
3 2
>>> x
[3]
隨着稍大範圍:
>>> x = [1, 2, 3, 4]
>>> for a in x:
... print a, x.pop(0)
...
1 1
3 2
>>> x
[3, 4]
一點點仍然較大:
>>> x = [1, 2, 3, 4, 5]
>>> for a in x:
... print a, x.pop(0)
...
1 1
3 2
5 3
>>> x
[4, 5]
這就像for循環創建從列表中產生,但比較「索引」與列表的長度以決定迭代何時結束。
它似乎仍然應該產生一個例外,但不是這種奇怪的行爲。有沒有理由不引發異常?
一個非常有趣的問題,因爲突變字典被重複*會引發異常。 – 2015-02-24 21:48:10
不重複。那些問什麼會發生,這是爲什麼Python允許它發生。 – 2015-02-24 21:49:12
他正在遍歷列表,而不是字典 – RPGillespie 2015-02-24 21:50:33