我的任务是通过新元素计算更新列表中的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]
由于
答案 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])]