Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从不同数量的输入中使用递归进行排列,以便在Python中工作?_Python_Function_Recursion_Permutation - Fatal编程技术网

如何从不同数量的输入中使用递归进行排列,以便在Python中工作?

如何从不同数量的输入中使用递归进行排列,以便在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

我几乎快完成程序了,但我有一个问题,如果我有2个以上的项目输入到一个列表中,比如3个项目或4个项目,它将只生成每行2个项目的输出,直到排列完成。我想让它输出对应于每行输入项目的数量,直到排列完成

(我还不能嵌入图像。下面是一个示例,说明它在下面的图像中所做的操作。)


在这里;我只更改了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))