1
Trim21 2019-08-18 23:53:57 +08:00 via Android
因为你在循环里把元素给删掉了
在循环前复制一份列表就好了 for i in nums[:]: |
2
ipwx 2019-08-19 00:00:48 +08:00 via Android
for in 循环内部改变循环对象,在有些语言里面你连编译都过不去
|
3
limyel 2019-08-19 00:30:25 +08:00
而且建议代码贴在 ubuntu paste 上面看起来会比较方便一些
|
4
Ctry OP @Trim21 多谢多谢,有点理解了。我删除了第一个元素,等到第二次循环的时候,程序把新列表的第一个元素(也就是旧列表的第二个元素)当作了刚才已经循环过的第一个元素,然后就跳过了。直接循环旧列表的第三个元素。这样的话就一直是间隔一个来循环了。
|
7
guiqiqi 2019-08-19 05:13:55 +08:00 via iPhone 1
@Ctry 无耻安利一波,之前才入门的时候也遇到过这个问题,还做了比较详细的探究,希望对你有帮助: https://init.blog/archives/1350
|
8
ipwx 2019-08-19 09:35:35 +08:00 via Android
@Ctry 你这操作适合写 while i<len(nums),自己管理 i 是否要步进 1。这也是需要修改被遍历对象时的标准做法
|
9
Yggdroot 2019-08-19 10:07:58 +08:00
v2ex 不是支持 markdown 吗,代码贴成这样?
|
10
no1xsyzy 2019-08-19 12:30:12 +08:00
把这段用函数式写就不大可能写错
|