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,嗯,我认为它在迭代之前将整个列表加载到内存中。列表已经“在内存中”,但迭代器将对列表本身进行操作,因此通过修改它,您将搞乱迭代状态。您需要创建列表的副本才能使其正常工作。