从数字集N生成长度k的组合,订单事项,允许替换

时间:2017-03-06 13:30:23

标签: python combinations permutation combinatorics itertools

我想从一组N个数字生成长度为k的组合,其中顺序很重要,数字可以替换。例如,如果k = 3,并且N = [1,2,3],则候选输出将包括例如(1,1,1),(2,2,2),(3,2,1) ,(1,2,3)。

我相信我几乎在那里使用以下代码

x = list(itertools.combinations_with_replacement(range(1,4),3)

但是这给出了顺序无关紧要的结果 - 即它认为(1,2,3)与(3,2,1),(2,3,1)等相同等。

非常感谢任何帮助!

2 个答案:

答案 0 :(得分:2)

您需要的是product

import itertools

N = [1, 2, 3]

y = list(itertools.product(N, N))
print(y)  # [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
          #             ^               ^
          #             |_______________| he no longer thinks it's the same

现在,根据您的问题,如果k != len(N)我不想清楚您想做什么,那么我会留给您(切片N可能吗?)..

答案 1 :(得分:1)

试试这个:

import itertools
x = [1, 2, 3]
list(itertools.product(x, repeat=3))