Существуют различные методы, которые можно использовать для выражения среза-n-кости. Так как вы хотите избавиться от всех не-x терминов (по звучанию), вы можете использовать as_independent
.
Создайте уравнение, аналогичное тому, как вы его представили:
>>> eq= S('1**3 + 1**2 + 1*x**2 + 2*1*x + 1 + 2*x + 2', evaluate=False)
>>> eq
x**2 + 2*x + 2*x + 1**3 + 1**2 + 1 + 2
Теперь получите x-независимые и x-зависимые части:
>>> eq.as_independent(x)
(5, x**2 + 2*x + 2*x)
>>> _[1]
x**2 + 2*x + 2*x
Если важно, чтобы термины не оценивались, вы можете приблизиться к этому с помощью
>>> from sympy import UnevaluatedExpr as Hold
>>> o=Hold(1)
>>> t=Hold(2)
>>> o**3 + o**2 + o*x**2 + t*o*x + o + t*x + t
x**2*1 + x*2 + x*2*1 + 1 + 1**2 + 1**3 + 2
>>> _.as_independent(x)
(1 + 1**2 + 1**3 + 2, x**2*1 + x*2 + x*2*1)