尝试创建一个删除奇数的函数。当我运行此代码时,它只打印出[2,3,4,5,6,7,8,9]。这是因为返回是在第一次迭代后取消我的循环吗?如果是这样,我该怎么修改它来运行循环并打印出一个删除了所有奇数的列表?
def evens(numbers):
for i in range(len(numbers)):
if numbers[i] % 2 != 0:
del numbers[i]
return numbers
numberlist = [1,2,3,4,5,6,7,8,9]
print evens(numberlist)
在你们为了重复的问题而向我倾倒之前......我在问为什么我的特定代码被打破了。这已经发现了一个有趣的旅行,即在循环中使用del方法意味着你实际上需要反向迭代。
答案 0 :(得分:1)
实际上,在第一个循环之后返回,将return
语句的缩进更改为少一个选项卡。此外,您应该从列表的末尾开始迭代回到开头,以便不会超出范围,因为您在迭代时修改了列表(删除元素)。
修改:
def evens(numbers):
for i in range(len(numbers), 0):
if numbers[i] % 2 != 0:
del numbers[i]
return numbers
为:
def evens(numbers):
for i in range(len(numbers)-1, -1, -1): # <-- change the iteration from end to beginning, in order not to run out of index range
if numbers[i] % 2 != 0:
del numbers[i]
return numbers # <-- change in indentation
<强>输出强>
[2, 4, 6, 8]