2016-12-06 37 views
0
a=[8,24,3,20,1,17] 
r=[] 
for i in a: 
    for j in a: 
     s=a[i]-a[j] 
     r.append(s) 
print r 

時候當我運行這個程序 爲什麼索引超出範圍的錯誤了這個問題?指數超出範圍的錯誤比較值

+0

'for i in a'遍歷'a'中的值。因此,在第一次迭代'我== 8',和一個'[8]'正試圖訪問一個元件出該列表的範圍的。 – khelwood

+1

'for in'循環元素,而不是索引。 – Ryan

+0

'因爲我在a'中循環遍歷每個元素。 '對於a中的j循環遍歷再次中的元素。因此,對於你的代碼,你想改變'S = A [1] -A [J]''到S = I-j'爲'i'和'j'已經在您嘗試值搶。 – Michael

回答

2

使用s = i - j而不是s = a[i] - a[j]

a=[8,24,3,20,1,17] 
r=[] 
for i in a: 
    for j in a: 
     s = i - j 
     r.append(s) 
print r 

輸出:

[0, -16, 5, -12, 7, -9, 16, 0, 21, 4, 23, 7, -5, -21, 0, -17, 2, -14, 12, -4, 17, 0, 19, 3, -7, -23, -2, -19, 0, -16, 9, -7, 14, -3, 16, 0] 

嘗試一下here!

0

你迭代的值,你應該做的

for i in range(len(a)): 
0

ij已經從你的列表元素。無需索引a

所以,改用s = i-j


你的問題是,a[i]在第一次迭代,這是出界變得a[8]

0

ij,你是他們誤爲索引

ij開始爲8(列表的第一個元素)。當然,a[8]給你一個錯誤,因爲你的列表的大小比這個要低。

0

也許是因爲當你做

`for i in list:` 

i不是指數,但實際數量。

嘗試做

a=[8,24,3,20,1,17] 
r=[] 
for i, x in enumerate(a): 
    for j, y in enumerate(a): 
     s = a[i]-a[j] 
     r.append(s) 
print r 

a=[8,24,3,20,1,17] 
r=[] 
for i in range(len(a)): 
    for j in range(len(a)): 
     s = a[i]-a[j] 
     r.append(s) 
print r