从列表python中删除数字

时间:2015-09-19 03:28:18

标签: python

尝试创建一个删除奇数的函数。当我运行此代码时,它只打印出[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方法意味着你实际上需要反向迭代。

1 个答案:

答案 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]