枚举在多项式函数 (Python) 中如何工作?

How does enumerate work in polynomial function (Python)?

我是一个 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

例如如果我采用 x = 2 的三次多项式,程序 returns 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)

这就是程序 returns:

Out[68]:
5

出乎我的意料。我想我误解了枚举版本是如何计算系数的。谁能告诉我我是怎么想错的?

以前的版本似乎更通用,因为它允许在列表中使用不同的系数,而我不确定枚举版本中的标量代表什么。

您应该使用与 evalP 相同的参数调用 evalPoly,例如evalPoly([1,1,1,1],2)

当你调用 evalPoly([3,1],2) 时,它 return 3*2^0 + 1*2^1 等于 5。