我在Sage中遇到以下问题:
我有一组排列对象和一组列表,每个列表长度为2.我希望有一个内置函数可以通过以下方式将排列应用于列表,例如:
result = (1,2,4)(3,5).apply_to([1,3])
print result
[2,5]
如果没有,请阅读有关如何编写此功能的任何提示。谢谢!
答案 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。