我在网上发现了一个函数,它可以生成一个集合的所有子多重集,然后返回它们。但当我浏览代码以了解其实际用途时,我真的陷入了困境。
代码如下:
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 block 并再次调用该函数,现在参数为“a”。我到达基本情况并将“a”附加到结果中。现在我返回结果。 for 循环现在已“激活”。子字符串被分配“a”并将其附加到结果列表中。现在,我已将“a”两次附加到名为“结果”的列表中。不知何故,在输出中它只显示一次。 非常感谢您的帮助。
最佳答案
Now, i have appended "a" two times to the list called 'result.
不,result
是一个局部变量,第一次向其附加“a”时,它是 build_substrings("a") 的局部
而第二次则是 result
)build_substrings("ab")
的本地结果
。它们是对您的方法的两次不同调用,因此它们不会共享其结果
。
关于python - 返回列表时函数中的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11216995/