要修改一个列表lista = [1,2,4,4,10,6,7,5,20],用以下代码把其中偶数删除,但最终得到的结果是有部分偶数没有删除,为什么没有删除干净?
for i in lista:
if i % 2 == 0:
lista.remove(i)
请用python写一个方法,以最小的代价来把所有偶数都删除,并说明为什么这样写可以删除所有偶数?
如果要在原列表上进行操作,该如何实现这功能?
lis = []
for i in lista:
if i % 2 != 0:
lis.append(i)
print(lis)
列表循环不能随便删除元素,你删除某个元素,下次循环索引就不对了,正确简单的写法就是我这样的。有帮助的话采纳一下哦!
要理解for 循环原理,比如第二个元素你删了后,下一个循环第几个元素?正常是第三个元素,但是原来第二个元素被删了,第三个跳到了第二个,但是按for循环的情况他还是自动选择第三个去循环它,解决办法就是用deepcopy方法,复制一个列表,循环它,其他的不变
顺序循环原址删除会导致删除元素后的所有元素前移一位,于是被删除元素的下一元素无法遍历到
原址修改可考虑倒序循环
lista = [1,2,4,4,10,6,7,5,20]
for i in range(len(lista) - 1, -1, -1):
if lista[i] % 2 == 0:
lista.remove(lista[i])