作者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/cn.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