[問題] 關於for...in...的一個BUG

看板Python作者 (燢)時間4年前 (2019/08/26 11:43), 4年前編輯推噓7(704)
留言11則, 6人參與, 4年前最新討論串1/1
各位先進,敝人一直為此簡單問題所困擾,願得高手解惑。 程式如下: node_comb = [(1, 2), (1, 3), (1, 4), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)] for nd in node_comb: if 1 in nd: node_comb.remove(nd) print(node_comb) 不管怎麼跑,出來的結果就是不對: [(1, 3), (1, 5), (2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 5)] (1, 3) 和 (1, 5) 不該在輸出中! 如果把 tuple 改成 list 結果仍錯,百思不得其解,好像是找到一個符合 條件的tuple就自動跳過下一個,是這樣嗎? -- <)".."(> ( (..) ) im a pig -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.167.6.243 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1566790998.A.BDB.html

08/26 11:46, 4年前 , 1F
蠻常遇到的問題:你心中有一個 index 一開始是 0
08/26 11:46, 1F

08/26 11:47, 4年前 , 2F
之後 node_comb[0] 被刪掉後 index 變成 1 這時候
08/26 11:47, 2F

08/26 11:47, 4年前 , 3F
這時候你覺得 node_comb[index] 是誰?
08/26 11:47, 3F
明白了,謝謝您!

08/26 11:48, 4年前 , 4F
簡單解法是 for nd in node_comb[:]: 不過有更好的方法
08/26 11:48, 4F
感謝大大,可以正常運作了

08/26 12:02, 4年前 , 5F
因為你在iteration過程中增刪list內容 最好如樓上一樣
08/26 12:02, 5F

08/26 12:03, 4年前 , 6F
不要寫這種會在迴圈內對正在迭代的list做新增/刪除元
08/26 12:03, 6F

08/26 12:03, 4年前 , 7F
素的就好了
08/26 12:03, 7F

08/26 12:05, 4年前 , 8F
以這個情況為例,直接[nd for nd in node_comb if 1 i
08/26 12:05, 8F

08/26 12:05, 4年前 , 9F
n nd]就好
08/26 12:05, 9F
感恩! ※ 編輯: tang1019 (118.167.6.243 臺灣), 08/26/2019 12:12:55 ※ 編輯: tang1019 (118.167.6.243 臺灣), 08/26/2019 12:16:19

08/26 12:21, 4年前 , 10F
Python不建議在for該list時對其做增加與刪除唷
08/26 12:21, 10F

09/21 23:22, 4年前 , 11F
這樣index會亂掉
09/21 23:22, 11F
文章代碼(AID): #1TOrLMlR (Python)