我正在尝试创建一个函数,它可以查看列表并删除所有奇数。我有一个问题,我的循环是出了界,我不知道如何解决它,谁能帮忙?谢谢
def isEven(number):
if(number % 2) == 0 and (number != 0):
return True
else:
return False
def only_even(intList):
for i in range(0, len(intList)):
if(isEven(intList[i])) == False:
del intList[i]
return intList
print(only_even([5, 8, 17, 6, 0, 20, 3]))
或者,如果不需要修改列表:
^{pr2}$当您使用
del
时,您正在更改列表的长度,但是for
循环试图迭代列表的原始长度,因此最终它将超出列表的边界。也就是说,len(intList)
不会在每次for
循环时求值。在解决方法是从旧列表中创建一个新列表并返回,如下所示:
现在您的打印声明将起作用:
^{pr2}$列表越界的原因是在缩小列表的同时迭代原始大小的范围!在
我正在执行一个切片赋值
^{pr2}$[:]
,以保留变异和返回列表的确切语义。如果你只想返回列表,它甚至更短您还可以简化is even函数,因为它已经计算为True/False
相关问题 更多 >
编程相关推荐