这是使用递归在列表中查找偶数的正确代码吗?

时间:2014-08-02 13:04:27

标签: python recursion

我想在列表中使用递归找到偶数,下面是一个很好的代码吗? (蟒)

def evenlis(lis):  
    n=len(lis)  
    if n==0:  
        return None  
    else:
        if lis[0]%2==0
            print lis[0]
        evenlis(lis[1:])

2 个答案:

答案 0 :(得分:3)

函数通常用于在处理后返回值。在您的情况下,您正在打印结果。您可以像这样更改

def evenlis(lis):  
    if len(lis) == 0:
        return []  
    else:
        return [lis[0]] if lis[0] % 2 == 0 else [] + evenlis(lis[1:])
  1. 如果列表的长度为零,则返回空列表

  2. 否则,使用条件表达式([lis[0]] if lis[0] % 2 == 0 else [])创建一个包含当前元素的临时列表,如果它是偶数

  3. 并将其与递归调用相同函数的结果连接起来,其余元素

  4. 但是,正如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:])

(我没有足够的声誉发表评论)