Sage中是否存在将排列应用于列表的函数?

时间:2017-06-12 04:09:18

标签: python permutation sage

我在Sage中遇到以下问题:

我有一组排列对象和一组列表,每个列表长度为2.我希望有一个内置函数可以通过以下方式将排列应用于列表,例如:

result = (1,2,4)(3,5).apply_to([1,3])
print result
[2,5]

如果没有,请阅读有关如何编写此功能的任何提示。谢谢!

2 个答案:

答案 0 :(得分:2)

类似于hiro主角的回答,但也许更直接:

sage: a = Permutation('(1,2,4)(3,5)')
sage: result = [a(i) for i in [1,3]]
sage: result
[2, 5]

有一点是Sage中的排列可以被称为函数,这就是第二行的工作原理。

答案 1 :(得分:1)

您可以使用from_cycles尝试此操作:

sage: from sage.combinat import permutation
sage: perm = permutation.from_cycles(5, ((1,2,4), (3,5)))
sage: perm  # -> [2, 4, 5, 1, 3]
sage: res = [perm[i-1] for i in [1, 3]]
sage: res   # -> [2, 5]

-1中的perm[i-1]是必需的,因为您的排列始于1,而不是0。有一种更优雅的方式将排列应用于列表:请参阅John Palmieri's answer