使用迭代器索引变量

时间:2017-03-03 13:41:08

标签: python sage

我想生成一个带有许多生成器的FreeAlgebra,在列表X中给出。

X=[var('X_%d%d' %(i,j)) for i in range(1,10) for j in range(i+1,10)]
F = FreeAlgebra(QQ, X)
F.inject_variables()

如何使用迭代器索引变量,例如。比如在F

写一个关系词典
X_ij * X_jk : X_jk * X_ij + X_ik, for i in range(1,10) for j in range(i+1,10) for k in range(j+1,10) ?

然后我需要

A = F.g_algebra(D)

如果我单独编写每个关系,X_12 * X_23:X_23 * X_12 + X_13,它可以工作,但我希望它适用于任意数量的变量。

我试过

X[i]*X[j] : X[j]*X[i] + X[some formula],

但似乎列表X不知道它的元素来自代数F(也不是A)。

这可能是一个非常基本的问题 - 我是Sage的新手。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

列表X仍然是符号变量列表(具有注入的副作用,然后通过注入自由代数变量来覆盖它)。这是副作用较少的副作用,但仍然是相同的。

X = ['X_%d%d' %(i,j)  for i in range(1,10) for j in range(i+1,10)]
F = FreeAlgebra(QQ, X)
F.inject_variables()

但是如果你然后强迫他们每个人F你就没事了 - see this example

X = ['X_%d%d' %(i,j)  for i in range(1,10) for j in range(i+1,10)]
F = FreeAlgebra(QQ, X)
F.inject_variables()
print type(X_12)
[F(x)*X_12 for x in X]

它会给你你想要的东西。请注意X_12确实是F的元素,但x in X不是。