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

使用sympy.Lambda处理列表时报'list'无is_Number属性错误如何解决

错误原因

sympy.Lambda是SymPy生态下的符号函数,仅支持传入单个符号/数值对象,你直接将整个Python列表作为参数传入,SymPy没有针对列表类型的运算适配,才会触发'list' object has no attribute 'is_Number'的属性不存在报错。

可行解决方案

根据你的使用场景可以任选以下方案实现需求:

方案1:遍历列表逐个调用符号函数

不需要修改原有函数定义,仅调整调用逻辑,对列表中每个元素单独调用f后收集结果即可:

import sympy

x = sympy.symbols('x')
f = sympy.Lambda(x, sympy.cos(x) + sympy.sin(x))

input_list = [-1, -0.5, 0, 0.5, 1]
# 逐个调用后收集结果
output_list = [f(val) for val in input_list]
# 若需要输出纯浮点数而非SymPy数值类型,可改成 output_list = [float(f(val)) for val in input_list]

print(input_list)
print(output_list)

方案2:向量化符号函数实现批量调用

用SymPy提供的sympy.vectorize对函数做向量化包装,就可以直接传入列表得到批量运算结果:

import sympy

x = sympy.symbols('x')
f = sympy.Lambda(x, sympy.cos(x) + sympy.sin(x))
# 对函数做向量化包装
f_vec = sympy.vectorize(0)(f)

input_list = [-1, -0.5, 0, 0.5, 1]
output_list = f_vec(input_list)

print(input_list)
print(output_list)

方案3:纯数值计算场景用原生Python实现

如果你没有后续符号推导的需求,仅做数值计算,直接用Python原生lambda搭配math库实现性能更高:

import math

f = lambda x_list: [math.cos(x) + math.sin(x) for x in x_list]

input_list = [-1, -0.5, 0, 0.5, 1]
output_list = f(input_list)

print(input_list)
print(output_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 16:24:02