Python 代码打印的是无,而不是不同的排列

Python 代码打印的是无,而不是不同的排列,python,return,permutation,Python,Return,Permutation,这里的程序是用python编写的,用于打印输入的不同排列。 例如 输入:[1,2,3] 输出:[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1] 代码 def swap(a,b): temp=a a=b b=temp return a,b def permut(z,l,n): if l==n: return (z) else: for i in range(l,n):

这里的程序是用python编写的,用于打印输入的不同排列。 例如 输入:
[1,2,3]

输出:
[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]

代码

def swap(a,b):
    temp=a
    a=b
    b=temp
    return a,b
def permut(z,l,n):
    if l==n:
        return (z)
    else:
        for i in range(l,n):
            swap(z[l],z[i])
            permut(z,l+1,n)
            swap(z[l],z[i])
p=[1,2,3]
t=permut(p,0,3)
print(t)
我没有得到理想的输出,而是在操作代码中得到了
None

错误


  • 由于参数是不可变的(在本例中为数字),swap函数将无法在适当的位置交换a、b的值
  • 您没有聚合找到的排列
代码

def permut(a, k=0, results=None):
    # results array will store the permutations found
    if results is None:
        results = []
    if k == len(a):   # using len(a) means we don't need the argument n in OP code
      results.append(a[:])
    else:
      for i in range(k, len(a)):
         a[k], a[i] = a[i] ,a[k]  # swap values
         permut(a, k+1, results)
         a[k], a[i] = a[i], a[k]  # swap back
    return results
测试

p = [1,2,3]
t = permut(p)   # using default k = 0
print(t)
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]
输出

p = [1,2,3]
t = permut(p)   # using default k = 0
print(t)
[[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 2, 1], [3, 1, 2]]

我认为您没有返回任何内容,因此变量
t
将获得
None
作为函数,而不使用任何return语句返回
None
,因为参数是不可变的(本例中为数字),所以
swap
函数将无法在适当的位置交换a、b的值。