2

我有几个向量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)?

4

2 回答 2

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)
于 2013-06-04T17:28:51.377 回答
1

如果您不那么担心效率,这可能会起作用。

from itertools import product

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

它采用输入向量的笛卡尔积并过滤置换下的等效向量。

于 2013-06-04T18:05:51.520 回答