Я нашел одно решение для моего собственного вопроса.Это работает, как я хочу.Вместо использования subs () я использую wild-оператор и replace ().
import sympy as sp
p1 = sp.IndexedBase("p1")
p2 = sp.IndexedBase("p2")
FF1 = sp.IndexedBase("FF1")
FF2 = sp.IndexedBase("FF2")
MM,NN,XX=sp.symbols('MM NN XX')
SSlist=[MM,NN,XX]
SS = sp.Wild('SS')
SS1 = sp.Wild('SS1')
testexpr=p1[MM]*p2[NN] + p1[XX]*p2[MM] + p1[XX]**2
replacements = {p1[SS]*p2[SS1] : FF1[SS]*FF2[SS1], p1[SS]**2: 0, p2[SS]**2 : 0}
def replaceall(expr, repls):
for i, j in repls.items():
expr = expr.replace(i, j, map=False, simultaneous=True, exact=False)
return expr
rest=replaceall(testexpr,replacements)
print(rest)
Результат дает то же самое, что и я:
FF1[MM]*FF2[NN] + FF1[XX]*FF2[MM]
Одна вещь, которую я хочу знать, - это эффективно, когда много символов из-за цикла for.Кажется, что эти два метода похожи, только тот, который я нашел недавно, выглядит более лаконичным.
Я хотел бы знать, есть ли более общий способ сделать такие вещи, как Wolfram Mathematica.
Любые комментарии приветствуются.Спасибо!