Вы можете воспользоваться преимуществом Общее устранение Subexpresion .Вы должны использовать его в сочетании с simplify
, объединяя все ваши выражения в одно искусственное выражение (например, передавая их в качестве аргументов фиктивной функции).Я не думаю, что он всегда будет работать так, как хотелось бы, однако на свободном аналоге вашего примера он дает ожидаемый результат:
In [1]: from sympy import *
In [2]: myexprlist = sympify('listofexpr(x|y, (z&x)|(z&y))')
In [3]: cse(simplify(myexprlist))
Out[3]: ([(x0, Or(x, y))], [listofexpr(x0, And(x0, z))])
Первая запись в результате представляет собой список введенных подвыражений.В этом случае подвыражение x|y
было обозначено x0
.Вторая часть результата - это упрощенное выражение (упаковано в список, поскольку входные данные могут быть списком выражений).