2013-05-10 71 views
0

我想創建單詞或組合來自三個不同的數組。輸出應該是一個笛卡爾乘積,而另一個陣列的長度可變。例如:Python:各種列表到笛卡兒積,可變長度

array1 = ["a", "b", "c"] 
array2 = ["x", "y", "z"] 
Cartesian product of both, length 3: aaa, aab, aac ... axb, axc, axx... zzx, zzy, zzz 

請問您是否指向正確的方向?

+0

笛卡爾產品不包含重複元素,並且具有固定長度。我不知道你的問題是否有自己的名字。 CP將是'ax,ay,az,bx,by ... cz'。排列是從abc到('abc,acb,cab,cba,bac,bca')的元素的重新排序。你的例子並不完全清楚排序(是aac和aca解決方案的不同元素),但似乎是。 – 2013-05-11 17:03:58

+0

是的,這些肯定是不同的元素,至少按照我在這裏的定義。我知道笛卡爾產品的定義是不同的,但我不知道它的任何名稱。重複的排列似乎很適合,但它使用多個列表,所以它不是很清楚。 – hellerve 2013-05-11 17:29:35

+0

對不起:'不同的數組',不是'不同的元素' - 我引入了這個錯誤。 – 2013-05-11 19:49:19

回答

5

itertools模塊,其中有方法product它可以做你需要的。

>>> from itertools import product 
>>> [''.join(items) for items in product(array1 + array2, repeat=3)] 
['aaa', 'aab', 'aac', 'aax', 'aay', 'aaz', 'aba', 'abb', 'abc', 'abx', 'aby', 'abz', 'aca', 'acb', 'acc', 'acx', 'acy', 'acz', 'axa', 'axb', 'axc', 'axx', 'axy', 'axz', 'aya', 'ayb', 'ayc', 'ayx', 'ayy', 'ayz', 'aza', 'azb', 'azc', 'azx', 'azy', 'azz', 'baa', 'bab', 'bac', 'bax', 'bay', 'baz', 'bba', 'bbb', 'bbc', 'bbx', 'bby', 'bbz', 'bca', 'bcb', 'bcc', 'bcx', 'bcy', 'bcz', 'bxa', 'bxb', 'bxc', 'bxx', 'bxy', 'bxz', 'bya', 'byb', 'byc', 'byx', 'byy', 'byz', 'bza', 'bzb', 'bzc', 'bzx', 'bzy', 'bzz', 'caa', 'cab', 'cac', 'cax', 'cay', 'caz', 'cba', 'cbb', 'cbc', 'cbx', 'cby', 'cbz', 'cca', 'ccb', 'ccc', 'ccx', 'ccy', 'ccz', 'cxa', 'cxb', 'cxc', 'cxx', 'cxy', 'cxz', 'cya', 'cyb', 'cyc', 'cyx', 'cyy', 'cyz', 'cza', 'czb', 'czc', 'czx', 'czy', 'czz', 'xaa', 'xab', 'xac', 'xax', 'xay', 'xaz', 'xba', 'xbb', 'xbc', 'xbx', 'xby', 'xbz', 'xca', 'xcb', 'xcc', 'xcx', 'xcy', 'xcz', 'xxa', 'xxb', 'xxc', 'xxx', 'xxy', 'xxz', 'xya', 'xyb', 'xyc', 'xyx', 'xyy', 'xyz', 'xza', 'xzb', 'xzc', 'xzx', 'xzy', 'xzz', 'yaa', 'yab', 'yac', 'yax', 'yay', 'yaz', 'yba', 'ybb', 'ybc', 'ybx', 'yby', 'ybz', 'yca', 'ycb', 'ycc', 'ycx', 'ycy', 'ycz', 'yxa', 'yxb', 'yxc', 'yxx', 'yxy', 'yxz', 'yya', 'yyb', 'yyc', 'yyx', 'yyy', 'yyz', 'yza', 'yzb', 'yzc', 'yzx', 'yzy', 'yzz', 'zaa', 'zab', 'zac', 'zax', 'zay', 'zaz', 'zba', 'zbb', 'zbc', 'zbx', 'zby', 'zbz', 'zca', 'zcb', 'zcc', 'zcx', 'zcy', 'zcz', 'zxa', 'zxb', 'zxc', 'zxx', 'zxy', 'zxz', 'zya', 'zyb', 'zyc', 'zyx', 'zyy', 'zyz', 'zza', 'zzb', 'zzc', 'zzx', 'zzy', 'zzz'] 
+0

非常感謝! – hellerve 2013-05-10 12:23:00