You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python递归函数多次调用时如何清空结果列表?

解决Python递归函数中默认可变参数导致的列表复用问题

你的问题出在Python默认可变参数的初始化机制上:当你把result=[]作为函数默认参数时,这个列表对象是在函数定义时就创建的,所有后续调用都会复用同一个列表实例,所以第二次调用时会把新数据追加到旧列表里。

下面提供两种符合你要求(仅用递归+局部变量、非全局)的解决方案:

方案1:用None作为默认参数,内部初始化空列表

修改函数,将默认参数设为None,在函数开头判断并初始化空列表,这样每次调用函数时都会创建新的列表:

def add_chars(some_list, some_str, result=None):
    if result is None:
        result = []
    if some_list == []:
        return result
    result.append(some_list[0])
    if some_str != '':
        result.append(some_str[0])
    return add_chars(some_list[1:], some_str[1:], result)

测试调用:

print(add_chars([2, 3, 18, "what", 9, "else", 8, 5], "absolute"))
# 输出: [2, 'a', 3, 'b', 18, 's', 'what', 'o', 9, 'l', 'else', 'u', 8, 't', 5, 'e']
print(add_chars([1, 2, 3, 4, 5], "hel"))
# 输出: [1, 'h', 2, 'e', 3, 'l', 4, 5]

方案2:使用辅助递归函数

通过外部函数初始化局部空列表,内部嵌套递归函数操作这个列表,确保每次调用外部函数时都新建列表:

def add_chars(some_list, some_str):
    result = []
    def recursive_helper(lst, s):
        if lst == []:
            return result
        result.append(lst[0])
        if s != '':
            result.append(s[0])
        return recursive_helper(lst[1:], s[1:])
    return recursive_helper(some_list, some_str)

两种方案都能解决你的问题,方案1更贴近你原来的代码结构,方案2则完全避免了默认可变参数的陷阱。

内容的提问来源于stack exchange,提问作者danial

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 20:50:27