矢量元素的组合

时间:2013-06-04 16:30:59

标签: algorithm combinations

我有几个向量a=[1 2 3 ...]b=[1 2 3 ...]c=[1 2 3 ...]。我必须找到所有可能的组合,这些组合由从这些向量中的每一个中取出的元素组成,如:

[1 1 1]
[1 1 2]
[3 3 3]
etc.

问题是我必须排除包含相同元素的组合,因为顺序无关紧要。例如,在显示组合[1 2 1]时,应排除组合[2 1 1]。我怎么能用任何编程语言(首选python)?

2 个答案:

答案 0 :(得分:2)

我不确定我是否完全理解您的要求,但您可能会发现itertools很有帮助。

例如:

from itertools import combinations_with_replacement as cr
for a in cr([1,2,3],3):
   print a

打印

(1, 1, 1)
(1, 1, 2)
(1, 1, 3)
(1, 2, 2)
(1, 2, 3)
(1, 3, 3)
(2, 2, 2)
(2, 2, 3)
(2, 3, 3)
(3, 3, 3)

答案 1 :(得分:1)

如果您不担心效率,这可能会奏效。

from itertools import product

def specialCombinations(*vectors):
  return {tuple(sorted(i)): i for i in product(*vectors)}.values()

它需要输入向量的笛卡尔乘积并过滤 在排列下等价的。