2013-06-04 51 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]。我怎麼能用任何編程語言來做到這一點(Python是首選)?

回答

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)