如何将可变长度取值列表传入lambdify生成的函数计算数学表达式
解决方案
直接使用Python的序列解包语法即可实现需求:在取值列表list_values前添加*符号,即可将列表内的元素按顺序展开为函数的位置参数,完全匹配动态生成的f的入参要求,无需提前知晓参数数量。
完整实现示例
from sympy import lambdify def evaluate(expression, list_var, list_values): f = lambdify(list_var, expression) # 核心逻辑:用*解包列表作为位置参数 return f(*list_values)
测试用例(匹配你给出的示例场景)
from sympy import symbols # 定义符号变量、表达式、变量列表、取值列表 x, y = symbols('x y') expr = "x + 3 - y" list_var = [x, y] list_values = [5, 2] # x取5,y取2 # 调用函数计算 result = evaluate(expr, list_var, list_values) print(result) # 输出为6,等价于直接执行f(5, 2)
注意事项
- 需保证
list_values的长度、元素顺序和list_var完全一一对应,否则会出现变量赋值错误、参数数量不匹配的报错。 - 该方法支持任意长度的变量列表,无需提前适配参数数量。
内容的提问来源于stack exchange,提问作者BJB ChessEmperor
相关产品推荐
相关产品推荐

