[问题] 关于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