如何从不同数量的输入中使用递归进行排列,以便在Python中工作?
我几乎快完成程序了,但我有一个问题,如果我有2个以上的项目输入到一个列表中,比如3个项目或4个项目,它将只生成每行2个项目的输出,直到排列完成。我想让它输出对应于每行输入项目的数量,直到排列完成 (我还不能嵌入图像。下面是一个示例,说明它在下面的图像中所做的操作。)如何从不同数量的输入中使用递归进行排列,以便在Python中工作?,python,function,recursion,permutation,Python,Function,Recursion,Permutation,我几乎快完成程序了,但我有一个问题,如果我有2个以上的项目输入到一个列表中,比如3个项目或4个项目,它将只生成每行2个项目的输出,直到排列完成。我想让它输出对应于每行输入项目的数量,直到排列完成 (我还不能嵌入图像。下面是一个示例,说明它在下面的图像中所做的操作。) 在这里;我只更改了3或4行,这很有效: def all_permutations(n, permList, nameList): if len(permList) == n: for i in range
在这里;我只更改了3或4行,这很有效:
def all_permutations(n, permList, nameList):
if len(permList) == n:
for i in range(len(permList)):
print(permList[i], end=" ")
print()
else:
for indx, itm in enumerate(nameList):
permList.append(itm)
nameList.pop(indx)
all_permutations(n, permList, nameList)
nameList.insert(indx, itm)
permList.pop()
if __name__ == "__main__":
nameList = input().split(' ')
permList = []
all_permutations(len(nameList), permList, nameList)
执行循环的更好方法是:
if len(permList) == n:
print(' '.join(permList))
当然有。由于
如果len(permList)==2或len(permList)==3或len(permList)==4
,您的函数将永远不会超过2项。您需要告诉所有排列
有多少个名称,以便它知道何时停止。else语句中需要处理的是哪一个?因为我在一个程序中使用这个程序,这个程序用两个名字、三个名字或四个名字来测试我编写的程序。我也在if语句中没有循环的情况下尝试了它,去掉了permList==2,用permList==3尝试了它,然后它吐出了3个项目。@TimRoberts我迷路了,我试图从enumerate(nameList)
更改为range(len(nameList))
,它给了我一个解包错误,所以我不认为是这样的。当我在if name==main下的nameList=input().split()
之后执行print(len(nameList))
时,它对应于我认为枚举的有多少个名称,这已经发生了吗?
if len(permList) == n:
print(' '.join(permList))