Sympy中如何对args列表排序及筛选最低指数项?
Sympy相关问题解答
1. 如何对Sympy中的args列表进行排序?
Sympy表达式的args属性返回未排序的子项列表,可通过以下方式排序:
- 使用
sympy.utilities.iterables.sort_args函数,按Sympy默认规则排序:from sympy import symbols from sympy.utilities.iterables import sort_args x = symbols('x') expr = 6*x**3 + 2*x**(1/2) sorted_args = sort_args(expr.args) - 用Python内置
sorted()函数结合自定义规则,比如按变量幂次排序:sorted_args = sorted(expr.args, key=lambda term: term.as_poly(x).degree() if term.as_poly(x) else 0)
2. 从表达式中选出指数最低的项
对于6*x**3 + 2*x**(1/2)这类含非整数幂次的表达式,Poly不适用,可通过以下简便方法解决:
- 使用
as_ordered_terms()方法,默认按变量升幂排序,取第一个即为指数最低的项:from sympy import symbols x = symbols('x') expr = 6*x**3 + 2*x**(1/2) ordered_terms = expr.as_ordered_terms() # 结果为[2*x**0.5, 6*x**3] lowest_term = ordered_terms[0] - 若需自定义排序逻辑,可通过
sorted()函数提取项的指数进行排序:def get_exponent(term, var): if term.is_Mul: for factor in term.args: if factor.is_Pow and factor.base == var: return factor.exp return 0 elif term.is_Pow and term.base == var: return term.exp elif term == var: return 1 else: return 0 lowest_term = sorted(expr.args, key=lambda t: get_exponent(t, x))[0]
内容的提问来源于stack exchange,提问作者Ragon
相关产品推荐
相关产品推荐

