我是一个Python初学者,对于在以下SO线程中求和多项式问题时枚举函数有点困惑:
Evaluating Polynomial coefficients
该线程包括几种求解多项式求和的方法。我理解以下版本:
def evalP(lst, x):
total = 0
for power in range(len(lst)):
total += (x**power) * lst[power] # lst[power] is the coefficient
return total
E.g。如果我使用x = 2的三次多项式,程序将根据笔和纸计算返回15,如我所料:
evalP([1,1,1,1],2)
Out[64]:
15
但是还有另一个更整洁的版本使用枚举函数:
evalPoly = lambda lst, x: sum((x**power) * coeff for power, coeff in enumerate(lst))
问题在于我无法将之前的结果复制到那里。这就是我尝试过的:
coeff = 1
power = 3
lst = (power,coeff)
x = 2
evalPoly(lst,x)
这就是程序返回的内容:
Out[68]:
5
不是我的预期。我想我误解了枚举版本对系数的影响。谁能告诉我我怎么想这个错?
之前的版本似乎更通用,因为它允许列表中的系数不同,而我不确定枚举版本中的标量代表什么。
答案 0 :(得分:1)
您应该使用与evalPoly
相同的参数来呼叫evalP
,例如evalPoly([1,1,1,1],2)
当你致电evalPoly([3,1],2)
时,它会返回3 * 2 ^ 0 + 1 * 2 ^ 1,等于5。