2013-06-04 2 views
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]을 제외해야합니다. 어떻게 모든 프로그래밍 언어에서 그렇게 할 수 있습니까 (파이썬이 선호됩니다)?

답변

1

당신이 효율성에 대해 걱정하지 않으면이 작동하지 않을 수 있습니다.

from itertools import product 

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

은 입력 벡터의 직교 제품을 취하고 순열 하에서 동등한 것들 필터.

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)