1

我在网上找到了一个函数,它生成一组的所有子多组,然后返回它们。但是当我浏览代码以了解它的实际作用时,我真的被卡住了。

这是代码:

def build_substrings(string):
    """ Returns all subsets that can be formed with letters in string. """
    result = []
    if len(string) == 1:
        result.append(string)
    else:
        for substring in build_substrings(string[:-1]):
            result.append(substring)
            substring = substring + string[-1]
            result.append(substring)
        result.append(string[-1])
    return result

现在,假设我用争论“ab”来称呼它。基本情况被忽略,所以我进入 else 块并再次调用该函数,现在参数是“a”。我到达了基本情况,它在结果中附加了“a”。现在我返回结果。for 循环现在已“激活”。子字符串被分配“a”,并附加到结果列表中。现在,我在名为 'result' 的列表中添加了两次“a”。不知何故,在输出中它只显示一次。非常感谢您的帮助。

4

1 回答 1

2

现在,我在名为“结果”的列表中添加了两次“a”。

不,result是一个局部变量,第一次附加“a”时,它是局部变量,而第二次result是局部build_substrings("a")变量resultbuild_substrings("ab")它们是对您的方法的两个不同调用,因此它们不会共享它们的result.

于 2012-06-26T23:06:50.090 回答