Я пытаюсь сделать свой первый список-массив.

matrix = [list() for x in range(10)]
for i in range (10):
    matrix[i] = [0 for x in range(3)]
    matrix[2][0] = 1
print (matrix)

Если я хочу изменить значение в ячейке выше нуля в первой скобке индекса, например [2] [0], я получаю ошибку «индекс назначения списка вне допустимого диапазона». Я могу изменить значения в ячейках [0] [0], [0] [1] и [0] [2], но не в ячейках [1] [x] или с более высоким значением в первой скобке. Я действительно не понимаю своей ошибки, поскольку все ячейки до [9] [2], кажется, определены, если я их распечатаю, насколько мне известно.

Большое спасибо за Вашу помощь!

2
Marc833 24 Ноя 2020 в 00:17

3 ответа

Лучший ответ

Давайте пройдемся по вашему коду.

matrix = [list() for x in range(10)]

На данный момент matrix - это список, содержащий 10 пустых списков. Теперь давайте рассмотрим первую итерацию цикла for.

for i in range (10): # i will be 0
    matrix[i] = [0 for x in range(3)] # matrix is now a list of
                                      # (one list of 3 zero's),
                                      # and 9 empty lists
    matrix[2][0] = 1 # remember that the rest of the elements in matrix
                     # are still empty lists. matrix[2] is an empty list,
                     # so you can't access matrix[2][0], as that would be
                     # getting the 0th index of an empty list.
3
Joe Ferndz 23 Ноя 2020 в 21:37

Обратите внимание на отступы.

Что вы делаете: вы определяете список списков

matrix = [list() for x in range(10)]

10 раз вы собираетесь вставить список в i-й элемент матрицы и в том же цикле вы собираетесь инициализировать элемент 1, но этот элемент. Но этот элемент при первом запуске цикла не был инициализирован, поэтому, когда вы выполните matrix[2][0], вы получите индекс вне диапазона выполнения

for i in range (10):
    matrix[i] = [0 for x in range(3)]
    matrix[2][0] = 1

Попробуйте вместо этого:

for i in range (10):
    matrix[i] = [0 for x in range(3)]
matrix[2][0] = 1
3
tia.milani 23 Ноя 2020 в 21:27

Эта ошибка возникла из-за того, что у вас нет данных в списке внутри списка. Это означает, что в вашем списке нет элементов внутри списков. Так что ни из чего нельзя получить ни одного элемента. Ошибка - это ваше первое понимание списка. Вы не добавляли значения. Я поправил.

matrix = [[x] for x in range(10)]
for i in range(10):
    matrix[i] = [0 for x in range(3)]
    matrix[2][0] = 1
print(matrix)

Я думаю, вам нужно присвоить значения в ваших пустых списках. вы не можете сделать это со знаком равенства. Вам нужно вставлять элементы, используя метод insert вместо assign. как в следующем примере

matrix = [list() for x in range(10)]
for i in range(10):
    matrix[i] = [0 for x in range(3)]
    matrix[2].insert(0, 1)
print(matrix)

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

2
vsrukshan 23 Ноя 2020 в 21:46
64976579