首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >堆置换列表

堆置换列表
EN

Stack Overflow用户
提问于 2020-10-31 10:38:11
回答 1查看 43关注 0票数 0

我试着在python中编写堆的排列,由于某种原因,当我在重计中直接打印它们时,它工作得很好。一旦我试图将它们全部添加到列表中,问题就开始了。

代码语言:javascript
复制
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)

产出:

代码语言:javascript
复制
[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]]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-31 10:40:20

所有的排列都是对您不断修改的同一个list对象的引用。最简单的修复方法是附加浅拷贝,而不是:

代码语言:javascript
复制
permutations.append(to_permute[:])
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64620810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档