我试图了解这种排列算法是如何工作的:
def perm(n, i):
if i == len(n) - 1:
print n
else:
for j in range(i, len(n)):
n[i], n[j] = n[j], n[i]
perm(n, i + 1)
n[i], n[j] = n[j], n[i] # swap back, for the next loop
perm([1, 2, 3], 0)
输出:
[1, 2, 3]
[1, 3, 2]
[2, 1, 3]
[2, 3, 1]
[3, 2, 1]
[3, 1, 2]
问题
原始列表是如何打印第一个行?
在此示例中,n
的长度为3.最初,i
为0.代码应跳过if
语句,然后第一次迭代会使列表发生变异。我们如何将[1, 2, 3]
作为第一行输出?
答案 0 :(得分:3)
它 跳过顶层的array([[1, '', ''],
[1, '', '']], dtype=object)
。它落入if
并通过列表迭代else
。第一次迭代有i == j == 0,所以交换什么都不做,你重复([1,2,3],1)。
对于该实例重复此过程,其中i == j == 1.以([1,2,3],2)重复该实例是打印{{em>实例的实例1}}作为第一行输出。
这清楚了吗?
如果没有,请学习如何插入有用的j
语句来跟踪执行。
也许这使得它更加清晰。
[1, 2, 3]
输出:
print