Python 关于试图打印给定列表的所有排列的问题

Python 关于试图打印给定列表的所有排列的问题,python,Python,我只是想找出python shell没有为以下递归代码提供预期输出的原因: def置换器(列表、曲目): 如果len(list)==1: track.append(列表[0]) 打印(轨道) 其他: 对于范围内的n(len(列表)): track.append(列表[n]) 返回置换器(列表[:n]+列表[n+1:],轨迹) 当变量“track”被初始化为空列表([])时,我希望这个脚本打印给定列表的所有排列;例如,我希望置换器([1,2],])打印[1,2]和[2,1]。但它只打印[1,2]

我只是想找出python shell没有为以下递归代码提供预期输出的原因:

def置换器(列表、曲目): 如果len(list)==1: track.append(列表[0]) 打印(轨道) 其他: 对于范围内的n(len(列表)): track.append(列表[n]) 返回置换器(列表[:n]+列表[n+1:],轨迹) 当变量“track”被初始化为空列表([])时,我希望这个脚本打印给定列表的所有排列;例如,我希望
置换器([1,2],])
打印
[1,2]
[2,1]
。但它只打印
[1,2]
。。。这真的让我失望了,因为我花了很多时间来理解把置换函数看作两个变量的函数而不是一个变量的函数,这样轨迹“记录”递归过程(顺序迭代过程),直到到达原始列表的置换

那我错在哪里?它是基本的(所以整个代码的想法都是错误的…)还是我只需要做一个小的变化就可以让它开始工作


我真的试图在这个问题上取得成功,但我已经放弃了,所以每一个帮助都会得到祝福

当您
返回时
函数结束,循环的其余部分永远不会执行。此外,您不希望附加到列表中,因为这会影响传递给稍后调用的函数的列表,而只是像附加为参数后那样传递列表。特别是在这里,由于您只想打印值,因此无需返回,因此可以执行以下操作:

def permutator(list,track):
    if len(list)==1:
        track.append(list[0])
        print (track)
    else:      
        for n in range(len(list)):
            permutator(list[:n]+list[n+1:],track + [list[n]])
如果您决定返回所有排列而不是打印它们,那么更改非常简单:

def permutator(list,track):
    if len(list)==1:
        return track + [list[0]]
    else:
        perms = []
        for n in range(len(list)):
            perms.append(permutator(list[:n]+list[n+1:],track + [list[n]]))
        return perms

这是最基本的。您的代码中没有任何内容可能会改变
list
元素的顺序(顺便说一句,使用
list
作为变量名是个坏主意)。首先,您返回循环的第一次迭代,因此整个循环将随函数一起终止,因此与设置
n=0
具有相同的效果。非常感谢!我是python新手,所以我不知道当它返回循环结束时,循环的其余部分永远不会执行。。。无论如何,我希望发生的奇迹发生了,你的代码真的工作了(显然我投票给了你的答案)。谢谢