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

作者: tang1019 (燢)   2019-08-26 11:43:06
各位先進,敝人一直為此簡單問題所困擾,願得高手解惑。
程式如下:
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就自動跳過下一個,是這樣嗎?
作者: CMJ0121 (請多指教!!)   2019-08-26 11:46:00
蠻常遇到的問題:你心中有一個 index 一開始是 0之後 node_comb[0] 被刪掉後 index 變成 1 這時候這時候你覺得 node_comb[index] 是誰?
作者: ckc1ark (偽物)   2019-08-26 11:48:00
簡單解法是 for nd in node_comb[:]: 不過有更好的方法
作者: TitanEric (泰坦)   2019-08-26 12:02:00
因為你在iteration過程中增刪list內容 最好如樓上一樣
作者: iphone2003 (307)   2019-08-26 12:03:00
不要寫這種會在迴圈內對正在迭代的list做新增/刪除元素的就好了以這個情況為例,直接[nd for nd in node_comb if 1 in nd]就好
作者: XperiaZ6C (真●安卓輕旗艦)   2019-08-26 12:21:00
Python不建議在for該list時對其做增加與刪除唷
作者: waynechen251 (waynechen251)   2019-09-21 23:22:00
這樣index會亂掉

Links booklink

Contact Us: admin [ a t ] ucptt.com