Sage中可变数量的笛卡尔积

时间:2013-10-31 14:14:26

标签: sage

如何在圣人中创建可变数量的集合的笛卡尔积?

例如,如果A是长度为n的整数列表,我们想要创建笛卡尔积,其中 i 集合是集合{1,...的所有排列的集合。 ,A [I-1]};

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

其中*表示笛卡尔积运算符。

1 个答案:

答案 0 :(得分: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]]]