Python 无法理解为什么空闲gui不返回作者说它应该返回的值

Python 无法理解为什么空闲gui不返回作者说它应该返回的值,python,Python,我正在读《学习Python》一书,作者提供了这两段代码,然后他运行“abc”,像这样排列1(“abc”),当我在空闲状态下运行时,它返回abc的所有排列。它返回['abc']。我不明白作者是怎么说它应该返回['abc','acb'--等等] 我错过了什么 def permute1(seq): if not seq: return [seq] else: res = [] for i in range(len(seq)):

我正在读《学习Python》一书,作者提供了这两段代码,然后他运行“abc”,像这样排列1(“abc”),当我在空闲状态下运行时,它返回abc的所有排列。它返回['abc']。我不明白作者是怎么说它应该返回['abc','acb'--等等] 我错过了什么

def permute1(seq):
    if not seq:
        return [seq]
    else:
        res = []
        for i in range(len(seq)):
            rest = seq[:i] + seq[i+1:]
            for x in permute1(rest):
                res.append(seq[i:i+1] + x)
            return res

def permute2(seq):
    if not seq:
        yield seq
    else:
        for i in range(len(seq)):
            rest = seq[:i] + seq[i+1:]
            for x in permute2(rest):
                yield seq[i:i+1] + x

看起来您在第一个for循环的
返回res
行中添加了一个额外的缩进


这会使您的功能提前终止。在我们确认
permute1(“abc”)
按预期工作后。

您能帮助我理解permute1(rest)中x的递归部分吗?我不知道它当时在做什么。它是通过permute1返回的吗?我不明白为什么它不会无限循环?
rest=seq[:I]+seq[I+1:][/code>在每次递归调用中从
seq
中删除
I
th元素。由于
seq
越来越短,它最终会变成空的。空字符串或列表(即,
[]
)的值为假。因此递归终止于
if not seq
语句。我建议您在纸上逐行调用
permute1(“ab”)
并使用。祝你好运最简单的方法是:使用
itertools.compositions
itertools.permutations
itertools.product