Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 删除方法(删除奇数)_Python - Fatal编程技术网

Python 删除方法(删除奇数)

Python 删除方法(删除奇数),python,Python,我们想写一个函数,删除列表中的所有奇数 这就是我最后尝试的: def eliminate(x): for i in range(0, (len(x)-1)): if x[i] % 2 != 0: x.remove(x[i]) print(x) eliminate([1,2,5,6]) 我得到错误:列表索引超出范围 如果你能帮忙,我会非常感激,因为我不知道自己做错了什么,这让我发疯。我也尝试了pop和delete方法。但我不知道我做错了什么。

我们想写一个函数,删除列表中的所有奇数

这就是我最后尝试的:

def eliminate(x):
    for i in range(0, (len(x)-1)):
        if x[i] % 2 != 0:
           x.remove(x[i])
    print(x)
eliminate([1,2,5,6])
我得到错误:列表索引超出范围


如果你能帮忙,我会非常感激,因为我不知道自己做错了什么,这让我发疯。我也尝试了pop和delete方法。但我不知道我做错了什么。不过,这肯定是第四条线。有什么想法吗

在python中,每当您发现自己在rangelenx中为i做事时:您通常不会以最简单的方式做事

你可以用几种不同的方法做基本相同的事情,例如:

x = [1,2,5,6]

for i in x:
    if i % 2 == 1:
        x.remove(i)

print x
正如您所看到的,您不需要索引来完成这项工作,for循环直接将项目从列表中拉出

编辑-显然这在一般情况下不起作用,因为python编辑列表。似乎是。移除不是一个很好的方法

另一种选择是使用列表:

x = [1,2,5,6]

rem = [i for i in x if i % 2 == 0]

print rem

或者您可以使用,但我不会,因为没有特别的原因,我真的不喜欢过滤器。

当您从列表中删除元素时,会缩短列表,因此最终超出范围。您不应该迭代列表并同时删除其元素。如果你有5块饼干,吃了第二块,那么下一块是剩下的4块中的3块。然后你跑向“饼干超出范围”,因为你已经没有5个了。解决方案:改为创建一个新列表,该列表仅包含4个cookie。如果x[i]%2!=0新的\u列表。附录[i]。这很有意义!谢谢!我试图坚持一个列表,但制作另一个列表会更容易!然而,是否有一种方法可以使迭代长度适应列表变短?非常感谢你的帮助!不要这样做,这与任何其他“在迭代列表时删除”解决方案存在相同的问题。对于输入x=[1,3,2],这也会中断。@poke,嗯,我认为它在迭代之前将整个列表加载到内存中。列表已经“在内存中”,但迭代器将对列表本身进行操作,因此通过修改它,您将搞乱迭代状态。您需要创建列表的副本才能使其正常工作。