将列表中0元素移到后端 用从大到小的顺序遍历则能实现需求 用从小到大却无法做到
因为你列表a的长度也就是len(a)在变化导致的,事实上你这个方法的写法是不对的。 还有,这里for循环的作用是遍历列表,你可以把len(a)先用一个变量表示出来固定着再进行后面的操作。 然后,a[i]这里你也没有索引到正确的位置,你可以把每一步的a[i]和i打印出来看一下检查一下 ``` print(a,a[i],i) ```道理很简单,我们先说从小到大:
你这个数组有5个位置,当你del a[i]的时候,a这个数组长度就只有4个位置了,此时你虽然往后塞了一个0,但是此时只有最后一个0的位置是准确的
当i循环到第5位的时候,你本来的意思应该取到的是2才对,但是此时你取到的其实是0,并且把0del掉了
不知道这么说你懂不懂
再说从大到小:
从大到小的结果虽然是对的,但是实际上也是错的,只不过以这种方式能够得到正确结果,在某些情况下,使用这种方法也会出问题
你之所以能够得到正确结果,就是因为你从后面开始检查,即使最后一个2不断地往前进一个索引,也不会影响到每一个i的索引都能获取到0,所以最终的结果是对的