Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Sympy-查找某一级别的所有表达式_Python 3.x_Sympy - Fatal编程技术网

Python 3.x Sympy-查找某一级别的所有表达式

Python 3.x Sympy-查找某一级别的所有表达式,python-3.x,sympy,Python 3.x,Sympy,图中显示了如何使用srepr(expr)创建包含公式树所有元素的字符串 我希望将此类树的某个级别的所有元素都放在列表中,而不是作为字符串,而是作为sympy对象。 例如 from sympy import * x,y,z = symbols('x y z') expr = sin(x*y)/2 - x**2 + 1/y s(repr) """ gives out => "Add(Mul(Integer(-1), Pow(Symbol('x'), Integer(2))), Mul(Ra

图中显示了如何使用
srepr(expr)
创建包含公式树所有元素的字符串

我希望将此类树的某个级别的所有元素都放在列表中,而不是作为字符串,而是作为sympy对象。 例如

from sympy import *
x,y,z = symbols('x y z')

expr = sin(x*y)/2 - x**2 + 1/y
s(repr) 
"""
gives out
=> "Add(Mul(Integer(-1), Pow(Symbol('x'), Integer(2))), Mul(Rational(1, 2),
sin(Mul(Symbol('x'), Symbol('y')))), Pow(Symbol('y'), Integer(-1)))"
"""
这将导致

first_level     = [sin(x*y)/2,-x**2,1/y]
second_level[0] = [sin(x*y),2]
我假设,最基本的问题是,如何根据表达式树索引一个symphy表达式,以便从任意点开始的所有更高级别在列表元素中求和


对于第一级,可以解决该任务 通过获取第一级的类型(在本例中添加,然后运行)


但是对于树中更深的表达式,它是如何工作的呢?

我认为您要查找的是
.args
。例如,您的示例我们有:

来自sympy导入的
*
x、 y,z=符号('x y z')
expr=sin(x*y)/2-x**2+1/y
第一级=expr.args
第二级=[e.args表示第一级中的e]
打印(第一级)
打印(第二级[0])
"""
(1/y,sin(x*y)/2,-x**2)
(y,-1)
"""
它们给出了元组,但我相信您可以将它们转换为列表

如果要直接进入树的底部,请使用
.atoms()
,它将生成一组:

print(expr.atoms())
"""
{x,2,y,-1,1/2}
"""
另一件有趣的事情是
perorder\u traversal()
,它似乎给出了一个树型对象,如果你遍历它,你会得到类似幂集的东西:

print([e代表预订单中的e\u遍历(expr)])
"""
[-x**2+sin(x*y)/2+1/y,1/y,y,-1,sin(x*y)/2,1/2,sin(x*y),x*y,x,y,-x**2,-1,x**2,x,x,2]
"""
以下是函数的docstring的开头:

对树进行预排序遍历

该迭代器递归地生成它以预排序方式访问过的节点。也就是说,它首先生成当前节点,然后沿树的宽度下降,以生成节点的所有子节点的预序遍历

对于表达式,遍历的顺序取决于.args的顺序,在许多情况下可以是任意的


如果这些都不是你想要的,那么我可能无法正确理解你的问题。对此表示歉意。

谢谢,这似乎详细回答了问题。
print(list(Add.make_args(expr)))