2024-06-17 12:55:26 发布
网友
我想用递归法在列表中找到偶数,下面的代码好吗?(Python)
def evenlis(lis): n=len(lis) if n==0: return None else: if lis[0]%2==0 print lis[0] evenlis(lis[1:])
函数通常用于在处理后返回值。在您的例子中,您正在打印结果。你可以改变,像这样
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 [])创建一个包含当前元素的临时列表
[lis[0]] if lis[0] % 2 == 0 else []
并将其与递归调用同一函数的结果以及其余元素连接起来
但是,正如Jon在评论中提到的,这不会扩展到更大的列表,因为我们可能会消耗所有的堆栈空间。我们通常使用列表理解和过滤条件来获得结果,如下所示
我们遍历列表,检查当前数字是否可以被2整除,如果可以,我们将该元素添加到结果列表中。在
接受的答案不会为我产生预期的结果;第二个条件中的返回值的顺序似乎是错误的。以下是我的解决方案:
def even(nums): if not nums: return [] elif nums[0] % 2 == 0: return [nums[0]] + even(nums[1:]) else: return even(nums[1:])
(我没有足够的声誉发表评论)
函数通常用于在处理后返回值。在您的例子中,您正在打印结果。你可以改变,像这样
如果列表的长度为零,则返回一个空列表
否则,如果当前元素是偶数,则使用条件表达式(
[lis[0]] if lis[0] % 2 == 0 else []
)创建一个包含当前元素的临时列表并将其与递归调用同一函数的结果以及其余元素连接起来
但是,正如Jon在评论中提到的,这不会扩展到更大的列表,因为我们可能会消耗所有的堆栈空间。我们通常使用列表理解和过滤条件来获得结果,如下所示
^{pr2}$我们遍历列表,检查当前数字是否可以被2整除,如果可以,我们将该元素添加到结果列表中。在
接受的答案不会为我产生预期的结果;第二个条件中的返回值的顺序似乎是错误的。以下是我的解决方案:
^{pr2}$(我没有足够的声誉发表评论)
相关问题 更多 >
编程相关推荐