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。