在递归置换代码中将输出列表作为参数传递是否好

时间:2019-06-04 00:25:08

标签: python

我有一个排列代码,我必须返回包含所有排列列表的输出列表。例如,如果我以[0,1]作为输入,则需要返回[[0,1],[1,0]]作为输出。为此,我在递归调用中将输出数组作为参数传递。这是一个好主意还是在permute中创建一个嵌套函数permute_list,该嵌套函数始终可以访问输出列表呢?只是想知道一个好的python用户应该怎么做。

import copy

def permute(l):
    """
    Return a list of permutations

    Examples:
       permute([0, 1]) returns [ [0, 1], [1, 0] ]

    Args:
      l(list): list of items to be permuted

    Returns:
      list of permutation with each permuted item being represented by a list
    """
    output = []
    if len(l) == 0:
        return [[]]
    else:
        permute_list(l,0,output)
    return output
def permute_list(l,ind,output):

    if ind == len(l) - 1:
        a = l.copy()
        output.append(a)
        print(f"{output}")

    for i in range(ind,len(l)):
        l[ind],l[i] = l[i],l[ind]
        permute_list(l,ind + 1,output)
        l[i],l[ind] = l[ind],l[i]

1 个答案:

答案 0 :(得分:0)

我尚未检查您的代码的准确性,但为了回答您的问题,output的处理方式似乎没有问题。 output是一个列表,考虑到在python中变量名用作对对象的引用,将其作为参数传递对堆栈长度没有影响。