从n + 1生成所有k-Permutations而不重新计算n python 3中的k-置换

时间:2017-10-22 11:12:48

标签: python algorithm

我的任务是通过新元素计算更新列表中的k-排列 不重新计算已经从列表的先前状态获得的k-排列。例如:

liste = [1, 2, 3]

3-permutations是:

[1, 2, 3], [1, 3, 2], [2, 1, 3], [2, 3, 1], [3, 1, 2], [3, 2, 1]

更新后的清单:

liste = [1, 2, 3, 4]

我想直接获取3-permutations[1, 2, 3, 4]-3-permutations[1, 2, 3] 无需重新计算3-permutations[1, 2, 3]

直接计算新的排列:

[1, 2, 4], [1, 3, 4], [1, 4, 2], [1, 4, 3], [2, 1, 4], [2, 3, 4], [2, 4, 1],
[2, 4, 3], [3, 1, 4], [3, 2, 4], [3, 4, 1], [3, 4, 2], [4, 1, 2], [4, 1, 3], 
[4, 2, 1], [4, 2, 3], [4, 3, 1], [4, 3, 2]

由于

2 个答案:

答案 0 :(得分:0)

尝试将现有排列保存到列表中,然后执行:

if newPermutation not in listOfExistingPermutations:
    listOfExistingPermutations.append(newPermutation)

或沿着这些方向的东西

答案 1 :(得分:0)

首先计算笛卡尔乘积{0,1,2,3} x {0,1,2} x {0,1}并取第(l)列中的第n个元素(1,2,3,4)

r=[]
for prd in itertools.product([[0,1,2,3],[0,1,2],[0,1]]):
    l=[1,2,3,4]
    r0=[]
    for i in prd:
        r0 += l[i]
        del l[i]
    r += r0

编辑:原始答案给出了[1,2,3,4]

的3个排列

以下命令专门回答问题,看看它是如何推广的

[list(j) for i in itertools.combinations([1,2,3],2) for j in itertools.permutations(list(i)+[4])]

下一个案例,也许是其中一个?

[list(j) for i in itertools.combinations([1,2,3],2) for j in itertools.permutations(list(i)+[4,5])]

[list(j) for i in itertools.combinations([1,2,3,4],3) for j in itertools.permutations(list(i)+[4,5])]
相关问题