我在网上找到了一个生成集合中所有子多重集的函数,然后返回它们。但是当我走过代码来理解它实际上做了什么时,我真的陷入困境。
以下是代码:
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循环现在被“激活”。 substring被指定为“a”,并将其附加到结果列表中。现在,我在名为'result'的列表中添加了两次“a”。不知何故,在输出中它只显示一次。 非常感谢你的帮助。
答案 0 :(得分:2)
现在,我已经在名为'result。
的列表中添加了两次“a”
不,result
是一个局部变量,第一次向其添加“a”时,它是result
的本地build_substrings("a")
,而第二次是本地result
1 {} build_substrings("ab")
。它们是对您的方法的两种不同调用,因此它们不会共享result
。