You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SymPy对列表元素求值?解决AttributeError报错

SymPy列表元素求值报错解决

问题背景

用户定义了包含SymPy符号表达式的列表,想要在θ=90°(即π/2弧度)时计算列表元素的值,相关代码如下:

列表定义代码

import sympy as sp 

theta = sp.symbols('theta')

A = [sp.cos(theta), sp.sin(theta),0,0]

尝试求值的报错代码

theta_val = sp.pi / 2
A_evaluated = [A.subs([theta, theta_val])]

print(A_evaluated)

报错信息:AttributeError: list object has no attribute subs

错误原因

A是Python列表对象,而subs是SymPy表达式对象的专属方法,列表本身不具备该方法,因此不能直接对整个列表调用subs。需要遍历列表中的每个元素,对单个SymPy表达式执行subs操作。

修正后的代码

方法一:列表推导式(推荐写法)

import sympy as sp 

theta = sp.symbols('theta')
A = [sp.cos(theta), sp.sin(theta), 0, 0]

theta_val = sp.pi / 2
# 遍历列表元素,仅对SymPy表达式执行subs,常量直接保留
A_evaluated = [elem.subs(theta, theta_val) if isinstance(elem, sp.Expr) else elem for elem in A]

print(A_evaluated)
# 输出结果:[0, 1, 0, 0]

方法二:普通循环处理

如果不习惯列表推导式,可使用循环逐个处理元素:

import sympy as sp 

theta = sp.symbols('theta')
A = [sp.cos(theta), sp.sin(theta), 0, 0]

theta_val = sp.pi / 2
A_evaluated = []
for elem in A:
    if isinstance(elem, sp.Expr):
        A_evaluated.append(elem.subs(theta, theta_val))
    else:
        A_evaluated.append(elem)

print(A_evaluated)
# 输出结果:[0, 1, 0, 0]

简化场景说明

如果列表中所有元素都是SymPy表达式(无0这类常量),可进一步简化代码:

A_evaluated = [elem.subs(theta, theta_val) for elem in A]

内容的提问来源于stack exchange,提问作者Bors DJ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 05:45:59