作者mantour (朱子)
看板Python
標題Re: [問題] 奇怪的問題...
時間Thu Mar 27 17:51:43 2008
sorry 看不太懂
我這樣理解不知道對不對
for i in L:
L.remove(i)
的效果相當於
i=0
while i < len(L):
L.remove(L[i])
i=i+1
所以如果本來L=['a','b','c','d','e']
i=0時
L.remove(L[0])之後 L 變成 ['b','c','d','e']
所以i=1時
L.remove(L[1]),去掉的會是'c',而'b'就被跳過了
不知道這樣想對不對?
※ 引述《chmate ([][][])》之銘言:
: 推 Yawper:原來如此 雖然不了解為何會被跳過 但還是謝謝 =.= 03/27 13:34
: python的list內部是array類的東西
: 在iteration時移除一個element
: 內部的index並不會被改變
: 少了一個element但index沒變
: 就有些被跳過了
: python的list在remove或del後
: iteration會變成未定義的狀態
: 大部份的language通常都這樣做
: C++的STL和Java也是
: 因為做出仍然有效的iterator非常麻煩且困難
: 如果還是需要這種型式的寫法
: 可以這樣做
: for i in a[:]:
: ...
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.213.158
推 chmate:是的 不過這跟內部實作有關 最好別依賴這種行為 03/27 18:24
→ mantour:謝謝 03/27 19:16
推 rexrainbow:從list的尾端開始刪除 03/28 18:22
推 silveran:從list的尾端開始刪除 +1 04/08 17:03