我之前询问过这段代码并获得了一些有用的答案,但我想再增加一个步骤,这会给我一个错误。代码生成一组余弦波,然后将它们全部相加。 这是代码:
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:列表索引超出范围“
然而,当我从零开始范围:for i in range(121)
并删除sum=sum + freq[i]
分母中的i时,程序运行正常。
我不明白当列表中没有零时它如何看到索引超出范围而当它有零时它是否有效?
答案 0 :(得分:2)
我不熟悉这种语法(你没有在标签中指定语言),但是当你从1开始而不是从0开始时,没有freq[1]
,因为当你添加第一个元素时到freq[]
它的索引可能是0(取决于语言,但它似乎在这里工作),所以第一个元素是freq[0]
。
如果您想保留此freq[i-1]
结构,可以尝试for
。
答案 1 :(得分:2)
当你从i = 1开始迭代时,那么:
freq.append(cos(2*pi*i*(x/8001)))
sum=(sum + freq[1])/i => freq[1] (index out of range)
希望它有所帮助。
答案 2 :(得分:0)
您的列表初始化为空列表。在第一次迭代期间,您附加一个项目,为freq[0]
赋值。但是,由于您的循环从i=1
开始,并且它尝试访问freq[1]
,因为还没有freq[1]
而发生错误。
当您将范围设置为零时没有错误,因为在第一次迭代期间(i=0
)freq[0]
存在。