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