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

Python 这是使用递归在列表中查找偶数的正确代码吗?,python,recursion,Python,Recursion,我想使用递归在列表中查找偶数,下面的代码好吗?(python) 函数通常用于在处理后返回值。在您的情况下,您正在打印结果。你可以这样改变 def evenlis(lis): if len(lis) == 0: return [] else: return [lis[0]] if lis[0] % 2 == 0 else [] + evenlis(lis[1:]) even_list = [number for number in my_l

我想使用递归在列表中查找偶数,下面的代码好吗?(python)


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

def evenlis(lis):  
    if len(lis) == 0:
        return []  
    else:
        return [lis[0]] if lis[0] % 2 == 0 else [] + evenlis(lis[1:])
even_list = [number for number in my_list if number % 2 == 0]
  • 如果列表的长度为零,则返回一个空列表

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

  • 并将其与递归调用同一函数的结果以及其余元素连接起来

  • 但是,正如Jon在评论中提到的那样,这不会扩展到更大的列表,因为我们可能会消耗所有的堆栈空间。我们通常使用列表理解,通过过滤条件得到结果,如下所示

    def evenlis(lis):  
        if len(lis) == 0:
            return []  
        else:
            return [lis[0]] if lis[0] % 2 == 0 else [] + evenlis(lis[1:])
    
    even_list = [number for number in my_list if number % 2 == 0]
    

    我们迭代列表,检查当前数字是否可以被2整除,如果可以,我们将该元素添加到结果列表中。

    它有语法错误,因此甚至不编译。我认为这是为了某种实践?现实世界的应用程序不会对此使用递归。。。它很容易在一个长长的列表中被打破…如果
    中的
    或者
    中的
    缺少冒号,
    “这是正确的代码吗…”为什么不测试它?!我认为第四只眼睛在我开始之前几秒钟,让你能够发布这个精确的解:)你也可以避免模运算,并按位计算它<代码>[如果不是数字&1,则在我的\u列表中数字对应数字]
    -发生的事情不太明显,但在大整数的情况下效率更高