2013-10-27 36 views
1

我之前詢問過有關此代碼並獲得了一些有用的答案,但我想再添加一個步驟,這會給我一個錯誤。該代碼會生成一組餘弦波,然後將它們相加。 這裏是代碼:IndexError:列表索引超出範圍 - 無法推理邏輯

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行,在 總和=(總和+ FREQ [I])/ I IndexError:列表索引超出範圍」

但是當我從零開始範圍:for i in range(121)並刪除分母sum=sum + freq[i]中的i時,程序正常工作。

我不明白它是如何看到索引超出範圍,當列表中沒有零時,它在零時有效?

+1

列表開始於索引'0',而不是'1'。 – OdraEncoded

回答

2

我不熟悉這種語法(您沒有在標籤中指定語言),但是當您從1開始而不是從0開始時,沒有freq[1],因爲當您將第一個元素添加到freq[]時索引可能是0(取決於語言,但它看起來像這裏工作),所以第一個元素是​​。

如果您想保留for構造,您可以嘗試freq[i-1]

2

當你開始迭代從i = 1,則:

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

希望它能幫助。

0

您的列表已初始化爲空列表。在第一次迭代中,您追加一個項目,賦予​​的價值。但是,由於您的循環開始於i=1,並且它嘗試訪問freq[1],因爲還沒有freq[1],所以會發生錯誤。

由於在第一次迭代期間(i=0)​​存在,所以當您將範圍設置爲零時沒有錯誤。

+0

這是否意味着無論我放在循環中,列表的索引總是從零開始? –

相關問題