我正在编写一个置换函数,它可以在Python中生成一个列表的所有排列组合。我的问题是,为什么这个工程:Python置换生成器拼图
def permute(inputData, outputSoFar):
for elem in inputData:
if elem not in outputSoFar:
outputSoFar.append(elem)
if len(outputSoFar) == len(inputData):
print outputSoFar
else:
permute(inputData, outputSoFar) # --- Recursion
outputSoFar.pop()
permute([1,2,3],[])
但这并不:
def permute(inputData, outputSoFar):
for elem in inputData:
if elem not in outputSoFar:
outputSoFar.append(elem)
if len(outputSoFar) == len(inputData):
yield outputSoFar
else:
permute(inputData, outputSoFar) # --- Recursion
outputSoFar.pop()
for i in permute([1,2,3], []):
print i
这不工作,要么(收率列表的副本):
def permute(inputData, outputSoFar):
for elem in inputData:
if elem not in outputSoFar:
outputSoFar.append(elem)
if len(outputSoFar) == len(inputData):
yield outputSoFar[:] # --- Copy of the list
else:
permute(inputData, outputSoFar) # --- Recursion
outputSoFar.pop()
for i in permute([1,2,3], []):
print i
这工作,但我仍然不知道为什么我需要添加收益的递归调用。 – 2010-08-05 05:40:27
考虑第一个函数调用和条件(如果len(outputSoFar)== len(inputData),或者不)。第一次调用将会失败(除非输入中只有一个元素),所以它不会产生任何结果。相反,它必须依靠递归调用来查找排列,当它们这样做时,它们将产生它们。但是,当它们返回到第一个函数调用时,它必须让它们回到原始调用方。 (每次递归,非基本情况下的调用都有类似的情况。)如果没有这个,只有递归树的叶子会产生任何东西。 – 2010-08-05 15:33:57