2016-12-06 3 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 iterates через значения в' a'. Поэтому в первой итерации 'i == 8' и' a [8] 'пытается получить доступ к элементу из диапазона списка. – khelwood

+1

'for in 'перебирает элементы, а не индексы. – Ryan

+0

'for i in a' перебирает каждый элемент в a. 'for j in a 'снова перебирает элементы в a. Поэтому для вашего кода вы хотели бы изменить 's = a [i] -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

i и j уже элементы из списков. Нет необходимости индексировать a.

Таким образом, вместо того, чтобы использовать s = i-j


Ваш вопрос в том, что a[i] становится a[8] при первой итерации, что выходит за пределы

0

i и j являются значения, и вы спутать их для индексы.

i и j начинаются с 8 (ваш первый элемент списка). Естественно, a[8] дает вам ошибку, так как размер вашего списка ниже этого.

0

Может быть, это потому, что, когда вы делаете

`for i in list:` 

i не является индексом, но фактическое число.

Try делает

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 
Смежные вопросы