作者tang1019 (燢)
看板Python
標題[問題] 關於for...in...的一個困擾
時間Mon Aug 26 11:43:06 2019
各位先進,敝人一直為此簡單問題所困擾,願得高手解惑。
程式如下:
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://webptt.com/m.aspx?n=bbs/Python/M.1566790998.A.BDB.html
1F:推 CMJ0121: 蠻常遇到的問題:你心中有一個 index 一開始是 0 08/26 11:46
2F:→ CMJ0121: 之後 node_comb[0] 被刪掉後 index 變成 1 這時候 08/26 11:47
3F:→ CMJ0121: 這時候你覺得 node_comb[index] 是誰? 08/26 11:47
明白了,謝謝您!
4F:推 ckc1ark: 簡單解法是 for nd in node_comb[:]: 不過有更好的方法 08/26 11:48
感謝大大,可以正常運作了
5F:推 TitanEric: 因為你在iteration過程中增刪list內容 最好如樓上一樣 08/26 12:02
6F:推 iphone2003: 不要寫這種會在迴圈內對正在迭代的list做新增/刪除元 08/26 12:03
7F:→ iphone2003: 素的就好了 08/26 12:03
8F:推 iphone2003: 以這個情況為例,直接[nd for nd in node_comb if 1 i 08/26 12:05
9F:→ iphone2003: n nd]就好 08/26 12:05
感恩!
※ 編輯: tang1019 (118.167.6.243 臺灣), 08/26/2019 12:12:55
※ 編輯: tang1019 (118.167.6.243 臺灣), 08/26/2019 12:16:19
10F:推 XperiaZ6C: Python不建議在for該list時對其做增加與刪除唷 08/26 12:21
11F:推 waynechen251: 這樣index會亂掉 09/21 23:22