二次插值函数报错TypeError: unsupported operand type(s) for /: 'list' and 'list'
解决二次插值函数的TypeError问题
问题重现
你编写了计算二次插值参数的函数q_f_a,输入为三点坐标列表:
def q_f_a(t_p): x1 = t_p[0][0] y1 = t_p[0][1] x2 = t_p[1][0] y2 = t_p[1][1] x3 = t_p[2][0] y3 = t_p[2][1] a = [ x1 * ( y3 - y2) + x2 * ( y1 - y3 ) + x3 * ( y2 - y1 )] / [( x1 - x2) * ( x1 - x3) * ( x2 - x3)] return a
调用ex1=[[0.0, 0.0], [1.0, 0.0], [2.0, -8.0]]时触发错误:
TypeError: unsupported operand type(s) for /: 'list' and 'list'
错误原因
你误将分子和分母的表达式用**方括号[]**包裹,导致两边都变成了单元素列表。Python中列表不支持/除法操作,因此抛出类型错误。
修正方案
去掉分子和分母的方括号,直接计算数值除法(可拆分分子分母提升可读性):
def q_f_a(t_p): x1 = t_p[0][0] y1 = t_p[0][1] x2 = t_p[1][0] y2 = t_p[1][1] x3 = t_p[2][0] y3 = t_p[2][1] numerator = x1 * (y3 - y2) + x2 * (y1 - y3) + x3 * (y2 - y1) denominator = (x1 - x2) * (x1 - x3) * (x2 - x3) a = numerator / denominator return a
测试验证
调用修正后的函数:
ex1 = [[0.0, 0.0], [1.0, 0.0], [2.0, -8.0]] print(q_f_a(ex1)) # 输出: -2.0
结果符合二次插值预期(对应二次函数为y = -2x²,参数a=-2)。
内容的提问来源于stack exchange,提问作者mark jan Horst
相关产品推荐
相关产品推荐

