我有几个向量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)?
答案 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()
它需要输入向量的笛卡尔乘积并过滤 在排列下等价的。