2016-12-06 38 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