试图使一个函数排列接受一组元素并返回其所有排列的集合,其中排列为元组类型。 这是我的代码:
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]
答案 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