如何在python递归函数中保留列表或dict?

时间:2012-10-29 01:16:22

标签: python

我必须在python中使用递归函数,下面的代码是一个简化模型。 我希望保留结果列表和字典字典在递归时不生成新的列表或字典,并在递归后返回它,如何解决?

def test(length):
    result = []
    dict = {}
    if length == 10:
        return result, dict
    else:
        result.append(length)
        dict[length] = length + 1
        test(length + 1)

x, y = test(0)
print x, y

2 个答案:

答案 0 :(得分:1)

使用执行递归的辅助函数,以及使用初始默认值调用帮助程序的main函数。

def test(length):
    result = []
    dict = {}
    _test(length, result, dict)
    return result, dict

def _test(length, result, dict):
    if length == 10:
        return
    else:
        result.append(length)
        dict[length] = length + 1
        _test(length + 1, result, dict)

x, y = test(0)
print x, y

答案 1 :(得分:0)

我认为你的递归有点破碎。

Python提供了一些其他选项来完成您想要做的事情。我喜欢这种格式:

def t(length, result = [], d = {}):
    if length == 10:
        return
    else:
        result.append(length)
        d[length] = length + 1
        t(length + 1)

    return (result, d)

x, y = t(0)
print x, y

数组和字典的初始化仅在解释器看到函数时发生,而不是每次调用函数时都会发生。有关python中默认参数的详细介绍,请参阅此page

在这种情况下,它们就像附加到函数的数组和字典一样。