индекс списка вне диапазона при увеличении в течение цикла - PullRequest
0 голосов
/ 02 сентября 2018

Просто новичок в Python. Я пытаюсь найти транспонирование матрицы без использования NumPy. Мой код как показано:

import fileinput

order = int(raw_input())
arr_input = [int(num) for num in raw_input().split(' ')]
arr = []
index = 0
for i in range(order):
    for j in range(order):
        arr[j][i] = arr_input[index] 
        print(index, i , j)
        index += 1

print(arr)

Там написано IndexError: list index out of range, из моего понимания цикл завершается, в то время как index увеличивается до 9, но у меня нет доступа к arr_input[9], тогда почему ошибка? Любая помощь будет оценена. Спасибо.

Ответы [ 2 ]

0 голосов
/ 02 сентября 2018

Вы должны немного изменить свой код, чтобы он работал правильно.

import fileinput

order = int(input())
arr_input = [int(num) for num in input().split(' ')]
arr = []
index = 0

for j in range(order):
    arr.append([])

for i in range(order):
    for j in range(order):
        print(index, i , j)
        arr[j].append(arr_input[index])
        index += 1

print(arr)

Я могу объяснить, почему вы получаете IndexError: список индекса выходит за пределы диапазона

arr[j][i] = arr_input[index] 

через эту строку кода вы пытаетесь получить доступ к j-й строке и i-му столбцу массива arr, но arr - это просто пустой массив. так что сначала вы должны сделать это

for j in range(order):
        arr.append([])

p.s: при присваивании значений в пустом массиве всегда используйте метод append (), чтобы избежать «ошибки индекса списка вне диапазона».

Надеюсь, это поможет вам

0 голосов
/ 02 сентября 2018

Вот что происходит на первой итерации вашего цикла:

arr = []
i = 0
j = 0
arr[i][j] = ...

Попробуйте в REPL .

>>> arr = []
>>> i = 0
>>> j = 0
>>> arr[i][j] = 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list index out of range

Так что же случилось?

  • arr[0][0] = 1 означает «установить первый элемент списка arr[0] равным 1».

  • arr[0] означает «первый элемент списка arr

  • arr - пустой список; у него нет первого предмета. Поэтому выражение arr[0] для этого состояния программы является ошибочным.

Как мы это исправим? Нам нужно убедиться, что мы создаем список для каждой строки.

# Create a blank matrix
for j in range(order):
    arr[j] = []

# Now fill in the values
for i in range(order):
    for j in range(order):
        arr[j][i] = ...
...