如何在圣人中创建可变数量的集合的笛卡尔积?
例如,如果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
其中*表示笛卡尔积运算符。
答案 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]]]