2

我真的没有代码可以发布这个,因为我很困惑如何编写它。我必须给出一个正整数列表和一个 x 值来复制以下示例:

>>> poly([1, 2, 1], 2)
9
>>> poly([1, 0, 1, 0, 1], 2)
21
>>> poly([1, 0, 1, 0, 1], 3)
91

我的方程式是p(x) = a0 + a1x + a2x**2 + a3x**3 + ... + anx**n,所以我的一个想法是检查列表的长度并使其自动确定必须执行的计算次数,然后将 x 替换为列表之外的任何值。不幸的是,我不知道如何写或者从哪里开始。

4

4 回答 4

2
def poly(a_list, x):
    ans = 0
    for n,a in enumerate(a_list):
        ans += a*x**n
    return ans

enumerate 函数返回一个元组,其中包含列表中每个元素的索引和值。因此,您可以使用“for index,value in enumerate(list)”轻松遍历列表。

于 2013-02-11T04:28:40.997 回答
2

如果你有 numpy 会更好:

>>> from numpy import polyval
>>> polyval([1, 2, 1], 2)
9
>>> polyval([1, 0, 1, 0, 1], 2)
21

我认为您必须先反转 a_list 。(它恰好起作用,因为 a_list 是回文)

于 2013-02-11T05:04:39.060 回答
1

以下是您可以实施的方法poly

def poly(l, x):
    sum = 0
    xp =1 
    for a in l:
        sum += a *xp #add next term
        xp = x* xp #xp is x^p
    return sum

print poly([1,2,1],2)
print poly([1,0,1,0,1],3)
于 2013-02-11T04:26:14.340 回答
0

你可以使用itertools 星图

>>> from itertools import starmap
>>> def poly(a_list, x):
...     val = lambda p, a: a*x**p
...     return sum(starmap(val, enumerate(a_list)))
...
>>> poly([1, 2, 1], 2)
9
>>> poly([1, 0, 1, 0, 1], 2)
21
于 2013-02-11T04:58:07.657 回答