我们想要编写一个删除列表中所有奇数的函数。
这是我最终尝试过的:
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
方法。但我不知道我在这里做错了什么。不过,这绝对是第四条线。有什么想法吗?!
答案 0 :(得分:-1)
在python中,每当你发现自己正在做for i in range(len(x)):
时,
你可以用几种不同的方式做同样的事情,例如:
x = [1,2,5,6]
for i in x:
if i % 2 == 1:
x.remove(i)
print x
正如您所看到的,您不需要索引来执行此操作,for循环将项目直接从列表中拉出。
编辑 - 显然这在一般情况下不起作用,因为python编辑了列表。似乎.remove
似乎不是一个非常好的方法。
另一种选择是使用列表理解:
x = [1,2,5,6]
rem = [i for i in x if i % 2 == 0]
print rem
或者你可以使用filter(但我不会因为没有特别的原因我不喜欢过滤。)