在Python中解析排列算法

时间:2017-05-18 21:41:36

标签: python algorithm permutation

我试图了解这种排列算法是如何工作的:

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]作为第一行输出?

1 个答案:

答案 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