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