Python 试图通过跟踪使用的字符来创建排列代码

Python 试图通过跟踪使用的字符来创建排列代码,python,jupyter-notebook,permutation,Python,Jupyter Notebook,Permutation,我试图创建一个使用递归进行排列的代码,方法是跟踪已经使用过的字符,但我使用的[]似乎没有跟踪我添加的字符。我该怎么解决这个问题 这就是我目前所拥有的 letter = [chr(i) for i in range(ord('A'),ord('Z')+1)] def permuteAux(N, X, I): used = [] if(I >= len(X)): print(X) else: for j in rang

我试图创建一个使用递归进行排列的代码,方法是跟踪已经使用过的字符,但我使用的[]似乎没有跟踪我添加的字符。我该怎么解决这个问题

这就是我目前所拥有的

letter = [chr(i) for i in range(ord('A'),ord('Z')+1)]  
def permuteAux(N, X, I):
    used = []
    if(I >= len(X)):
        print(X)
    else:        
        for j in range(N):
            if (letter[j] in used):
                permuteAux(N, X, I+1)
            else:
                X[I] = letter[j]
                used.append(letter[j])
                permuteAux(N, X, I+1)

您可以在文档中查看置换的官方实现,您的代码很难阅读和理解,并且违反了Python惯例。不要对变量名使用大写字母。永远不要有大写变量I和小写变量I。什么是N,X,I?请给他们更直观(小写)的名字,也给函数一个docstring,并给我们一个典型的调用。N似乎是一个(局部)变量,索引到全局列表
字母
;为什么不直接传递一个可用字母列表,而不需要N?与其在
0.(N-1)
上迭代j,然后索引
字母[j]
,不如直接在剩余的字母中为c做
类似的
X,I
似乎有些过火:为什么要使用
X[I]
赋值,而不仅仅是简单的
X.append(…)
甚至
X+字母[j]
?如果(I>=len(X))
而不是当一个输入为空时,为什么要在
时终止?我们根本不需要我。如果没有示例(MCVE),很难猜测应该如何调用代码。至于
字母=[chr(i)表示范围内的i(ord('A'),ord('Z')+1)]
,您可以用
导入字符串
替换所有这些,然后使用
字母=string.ascii_小写
来解释为什么
使用的
在函数调用之间不保留其值,这是因为它只是一个局部变量,每次递归时,您的函数都会在第一行用
使用的=[]
重新声明它。如果确实需要保留其值,请将其作为函数参数传递给subcalls,并在函数头中将其初始化为None。