2013-10-31 17 views
1

如何在Sage中創建可變數量的集的笛卡爾積?例如,如果A是長度爲n的整數列表,我們想要創建笛卡爾積,其集合是集合{1,...,A [i -1]};Sage中可變數量的笛卡爾積

def PermProd(A): 
    n=len(A) 
    X=Permutations(A[0]) * Permutations(A[1]) * ... * Permutations(A[n-1]) 
    return X 

其中*表示笛卡爾乘積運算符。

回答

1

CartesianProduct需要可變數量的參數,每個參數必須是可迭代的。所以,如果你的A是一個排列組列表,CartesianProduct(*A)就是你想要的。下面是一個例子:

sage: list(CartesianProduct(*(Permutations(i) for i in range(4)))) 
[[[], [1], [1, 2], [1, 2, 3]], 
[[], [1], [1, 2], [1, 3, 2]], 
[[], [1], [1, 2], [2, 1, 3]], 
[[], [1], [1, 2], [2, 3, 1]], 
[[], [1], [1, 2], [3, 1, 2]], 
[[], [1], [1, 2], [3, 2, 1]], 
[[], [1], [2, 1], [1, 2, 3]], 
[[], [1], [2, 1], [1, 3, 2]], 
[[], [1], [2, 1], [2, 1, 3]], 
[[], [1], [2, 1], [2, 3, 1]], 
[[], [1], [2, 1], [3, 1, 2]], 
[[], [1], [2, 1], [3, 2, 1]]]