有人能解释一下这个python排列代码吗?

有人能解释一下这个python排列代码吗?,python,algorithm,permutation,Python,Algorithm,Permutation,我在这里看到了一些关于排列的代码帖子,但我还没有找到一个很好的一步一步地了解实际情况的方法。如果有人能解释一下这段代码的每一步实际发生了什么,我将非常感激。我似乎不能完全理解它。我正在查看的代码是Python的,并且来自 def all_perms(str): 如果len(str)你看到的是一个。它是一个返回可以循环的对象的函数 在执行for循环的过程中,所有的perms都会执行到到达产量的点。值yielded作为p变量传递给循环。然后在方法上次退出的yield语句之后的位置继续执行all\u

我在这里看到了一些关于排列的代码帖子,但我还没有找到一个很好的一步一步地了解实际情况的方法。如果有人能解释一下这段代码的每一步实际发生了什么,我将非常感激。我似乎不能完全理解它。我正在查看的代码是Python的,并且来自

def all_perms(str):
如果len(str)你看到的是一个。它是一个返回可以循环的对象的函数


在执行
for
循环的过程中,
所有的perms
都会执行到到达
产量的点。值
yield
ed作为
p
变量传递给循环。然后在方法上次退出的
yield
语句之后的位置继续执行
all\u perms

首先,参数
str
的名称是一个错误的选择。这可能是因为它适用于Phyton中的所有类型的序列,但它应该是
seq
或是一些明确意图的东西

  • 如果列表长度为
    def all_perms(str):
    #如果只有一个项目,则只能有一个排列
    #单件
    
    如果len(str)感谢您!这就是我要找的。收益率和递归的结合使我起初很难理解,但现在它有了意义。我知道你对str变量的看法。如果是我写的,我也不会给它起这个名字,但我只是从我在原始帖子中提到的网站上抓取了它。再次感谢!令人惊讶的是,当你给变量取专有名称时,一些代码会变得简单得多;这就是我提到它的原因。谢谢你,这很有帮助。我知道itertools.permutations,但我真的只是想更好地了解我发布的代码中发生了什么。再次感谢!
    def all_perms(str):
        if len(str) <=1:
            yield str
        else:
            for perm in all_perms(str[1:]):
                for i in range(len(perm)+1):
                    yield perm[:i] + str[0:1] + perm[i:]
    
    
    for p in all_perms(['a','b','c']):
        print p
    
    def all_perms(str):
        # If there is only one item, there can be only one permutation
        # yield the single item
        if len(str) <=1:
            yield str
        else:
            # loop over the permutations returned by a recursive call to all_perms
            # note it is passing a subset of the list passed in.
            for perm in all_perms(str[1:]):
                # for each returned sub-permutation insert the item that
                # wasn't passed into each possible position.
                for i in range(len(perm)+1):
                    yield perm[:i] + str[0:1] + perm[i:]
    
    
    for p in all_perms(['a','b','c']):
        print p