我想在列表中使用递归找到偶数,下面是一个很好的代码吗? (蟒)
def evenlis(lis):
n=len(lis)
if n==0:
return None
else:
if lis[0]%2==0
print lis[0]
evenlis(lis[1:])
答案 0 :(得分:3)
函数通常用于在处理后返回值。在您的情况下,您正在打印结果。您可以像这样更改
def evenlis(lis):
if len(lis) == 0:
return []
else:
return [lis[0]] if lis[0] % 2 == 0 else [] + evenlis(lis[1:])
如果列表的长度为零,则返回空列表
否则,使用条件表达式([lis[0]] if lis[0] % 2 == 0 else []
)创建一个包含当前元素的临时列表,如果它是偶数
并将其与递归调用相同函数的结果连接起来,其余元素
但是,正如Jon在评论中提到的,这不会扩展到更大的列表,因为我们可能会消耗所有的堆栈空间。我们通常使用列表推导,使用过滤条件来获得结果,如此
even_list = [number for number in my_list if number % 2 == 0]
我们遍历列表,检查当前数字是否可以被2整除,如果是,我们将该元素添加到结果列表中。
答案 1 :(得分:0)
接受的答案对我没有产生预期的结果;第二个条件中的返回值似乎是错误的顺序。这是我的工作解决方案:
BinaryOperator<String>
def even(nums):
if not nums:
return []
elif nums[0] % 2 == 0:
return [nums[0]] + even(nums[1:])
else:
return even(nums[1:])
(我没有足够的声誉发表评论)