1

我之前询问过这段代码并得到了一些有用的答案,但我想再添加一个步骤,这给了我一个错误。该代码生成一组余弦波,然后将它们全部相加。这是代码:

from pylab import *
from numpy import *
freq=[]
x=linspace(-4000,4000,8001)
sum=0
for i in range(1,121,1):
    freq.append(cos(2*pi*i*(x/8001)))
    sum=(sum + freq[i])/i

plot(x,sum)
show()

使用此代码,我收到错误“第 8 行,在 sum=(sum + freq[i])/i IndexError: list index out of range”

但是,当我从零开始范围时:for i in range(121)并删除sum=sum + freq[i]程序分母中的 i 工作正常。

我不明白当列表中没有零时它如何看到索引超出范围而当有零时它工作?

4

3 回答 3

2

我不熟悉这种语法(你没有在标签中指定语言),但是当你从 1 开始,而不是从 0 开始时,没有freq[1],因为当你将第一个元素添加到freq[]它的索引时可能是 0 (取决于关于语言,但它似乎在这里工作),所以第一个元素是freq[0].

freq[i-1]如果您想保留此for结构,您可以尝试。

于 2013-10-27T19:41:18.623 回答
2

当您从 i=1 开始迭代时:

freq.append(cos(2*pi*i*(x/8001)))
sum=(sum + freq[1])/i   => freq[1] (index out of range)

希望能帮助到你。

于 2013-10-27T19:44:15.943 回答
0

您的列表被初始化为一个空列表。在第一次迭代期间,您附加一个项目,为freq[0]. 但是,由于您的循环从 开始i=1,并且它尝试访问freq[1],因此会发生错误,因为还没有freq[1]

当您从零开始范围时没有错误,因为在第一次迭代期间 ( i=0)freq[0]存在。

于 2013-10-28T13:57:06.490 回答