首页 > 解决方案 > 如何从 sympy 逻辑对象/表达式中获取所有文字(包括否定文字)?

问题描述

说我有这个表达:

输入:(p & ~q & q)

我知道它会简化为 False,但只是为了更容易理解。我想得到这个:

输出:[p, ~q, q]

我可以在不将表达式转换为字符串和字符串解析的情况下做到这一点吗?

标签: sympy

解决方案


更通用的方法是请求布尔值并过滤 Symbol 和 Not

>>> from sympy import Symbol, Not, Boolean, Or, And
>>> eq=Or(And(x,~y),z)
>>> [i for i in eq.atoms(Boolean) if isinstance(i, (Symbol,Not))]
[x, ~y, z, y]

推荐阅读