我有几个向量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)?
我有几个向量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)?
我不确定我是否完全理解了您的要求,但您可能会发现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)
如果您不那么担心效率,这可能会起作用。
from itertools import product
def specialCombinations(*vectors):
return {tuple(sorted(i)): i for i in product(*vectors)}.values()
它采用输入向量的笛卡尔积并过滤置换下的等效向量。