gpt4 book ai didi

Python:从列表中删除奇数

转载 作者:太空狗 更新时间:2023-10-29 21:16:09 26 4
gpt4 key购买 nike

我写了一个函数来从列表中删除奇数,就像这样:

def remove_odd(l):
for i in l:
if i % 2 != 0:
l.remove(i)
print l
return l

remove_odd([4,5,4])
remove_odd([4,5,4,7,9,11])
remove_odd([4,5,4,7,9,11,12,13])

它返回:

[4, 4]
[4, 4, 9]
[4, 4, 9, 12]

->错了

但是当我更改为删除偶数时:

def remove_even(l):
for i in l:
if i % 2 == 0:
l.remove(i)
print l
return l

remove_even([4,5,4])
remove_even([4,5,4,7,9,11])
remove_even([4,5,4,7,9,11,12,13])

答案是可以的:

[5]
[5, 7, 9, 11]
[5, 7, 9, 11, 13]

remove_odd() 函数有什么问题?我知道人们通常在 func 中创建第二个列表,然后将偶数附加到该列表,但我们可以用 list.remove() 解决这个问题吗?

谢谢!

最佳答案

您的函数以不同于您预期的方式工作。 for 循环采用第一个元素,而不是第二个元素等,因此当您删除一个元素时,其他元素会改变它们的位置并且可以被它跳过(在您的情况下会发生这种情况)当它们前面有另一个元素时奇数。

如果您坚持使用.remove() 方法,则必须改为对副本进行操作,如下所示:

def remove_odd(1):
for i in l[:]:
if i % 2 != 0:
l.remove(i)
return l

(l[:] 是列表 l 的浅拷贝)

但是,我认为使用列表理解会更清晰:

def remove_odd(l):
return [x for x in l if x % 2 == 0]

关于Python:从列表中删除奇数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14275118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com