我试着在python中编写堆的排列,由于某种原因,当我在重计中直接打印它们时,它工作得很好。一旦我试图将它们全部添加到列表中,问题就开始了。
permutations = []
def permutation(to_permute, k):
if k == 1:
print(to_permute) # this works
permutations.append(to_permute) # this doesn't
else:
permutation(to_permute, k - 1)
for i in range(k - 1):
if k % 2 == 0:
to_permute[k - 1], to_permute[i] = to_permute[i], to_permute[k - 1]
else:
to_permute[0], to_permute[k - 1] = to_permute[k - 1], to_permute[0]
permutation(to_permute, k - 1)
permute = [0, 1, 2]
permutation(permute, 3)
print(permutations)产出:
[0, 1, 2]
[1, 0, 2]
[2, 0, 1]
[0, 2, 1]
[1, 2, 0]
[2, 1, 0]
[[2, 1, 0], [2, 1, 0], [2, 1, 0], [2, 1, 0], [2, 1, 0], [2, 1, 0]]发布于 2020-10-31 10:40:20
所有的排列都是对您不断修改的同一个list对象的引用。最简单的修复方法是附加浅拷贝,而不是:
permutations.append(to_permute[:])https://stackoverflow.com/questions/64620810
复制相似问题