Sympy集合论:如何让子集并集结果返回预定义集合s?
如何让SymPy返回指定集合作为子集并集的结果
假设已通过SymPy定义以下集合:
from sympy import FiniteSet, Union s = FiniteSet('red', 'yellow', 'green') a = FiniteSet('red') b = FiniteSet('yellow') c = FiniteSet('green')
显然a、b、c都是s的子集,理论上三者的并集应该等于s,但执行Union(a,b,c)后,SymPy返回的是{'green', 'yellow', 'red'}(一个新的集合对象),而非预先定义的s。请问有没有办法让SymPy直接返回s作为并集结果?
解决办法
SymPy本身不会自动把并集结果关联到你预先定义的s变量,但可以用这几种方法实现需求:
手动校验替换
先算出并集,再判断它和s的元素是否完全一致,一致就返回s:union_res = Union(a, b, c) final_res = s if union_res == s else union_res print(final_res) # 输出就是你定义的s对象封装自定义并集函数
写个小函数封装逻辑,以后调用更方便:def my_union(*sets, target=None): res = Union(*sets) return target if target and res == target else res # 调用时传入目标集合s print(my_union(a, b, c, target=s)) # 直接返回s符号等式替换(适合复杂场景)
如果是在符号运算里需要关联,可以先建立映射关系,之后用替换来得到目标集合:union_expr = Union(a, b, c) # 建立并集到s的映射 eq_map = {union_expr: s} # 替换后得到s print(union_expr.subs(eq_map))
核心逻辑是SymPy的FiniteSet是按元素内容判断相等性的,只要两个集合的元素完全一致,==就会返回True,所以上面的方法都能生效。
内容的提问来源于stack exchange,提问作者Aneho
相关产品推荐
相关产品推荐

