Python:给定一组元素,返回其所有排列的集合

时间:2019-03-14 22:58:06

标签: python set permutation

试图使一个函数排列接受一组元素并返回其所有排列的集合,其中排列为元组类型。 这是我的代码:

def permutations(s):
str1 = list(s)
if len(str1) <= 1:
    print(s)
else:
    for i in range(0, len(s)):
        str1[0], str1[i] = str1[i], str1[0]
        permutations(str1[1:])
        str1[0], str1[i] = str1[i], str1[0]

鉴于此输入

print(sorted(permutations({1,2,3})))

它应该返回

[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

但是在头痛之后,我似乎只能得到

[3][2][3][1][1][2]

2 个答案:

答案 0 :(得分:1)

您可以在标准库中使用permutations from itertools来计算所有排列

from itertools import permutations
out = list(permutations({1,2,3}))
print(out)
#Output
[(1, 2, 3), (1, 3, 2), (2, 1, 3), (2, 3, 1), (3, 1, 2), (3, 2, 1)]

答案 1 :(得分:0)

您可能正在寻找一种算法,例如递归算法。以前我写过它(作为练习):

def get_permutations(array):
    result = list()

    def permute(x, index, acc=[0] * len(array)):
        if index == len(array):
            result.append(acc[:])
            acc = list()
            return None
        for j in range(len(x)):
            acc[index] = x[j]
            _x = x[:]
            _x.pop(j)
            permute(_x, index + 1, acc)

    permute(array, 0)
    return result