Я подумаю над тем, чтобы приблизиться к этому, признав, что вы генерируете список списков, а не двумерный массив.
Кроме того, учитывая ваш очевидный уровень опыта, я думаю, что процедурный подход может бытьхорошее начало для вас.
# Your given information
row = 6
col = 10
# Initialize an empty list of lists
lst = []
# Continuously append lists by converting range() objects
i = 1
while i <= (row * col):
next_i = i + col
arr.append(list(range(i, next_i)))
i = i + next_i
Следующими хорошими шагами было бы изучение документации для range () и list () .На первый взгляд они выглядят как функции, но на самом деле они являются неизменяемыми и изменяемыми (соответственно) тип последовательности
Примечание: комментарий к вашему вопросу гласит:
Вы случайно создали список с кучей ссылок на тот же внутренний список .
Чтобы проиллюстрировать это, рассмотрим, что происходит в интерактивном интерпретаторе python, когда я пытаюсь изменить (изменить) один элемент списка списков:
>>> row = 6
>>> column = 10
>>> lst = row*[column*[0]]
>>> lst
[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
>>> lst[0][0] = 999 # set just row 0, column 0 to 999
>>> lst
[[999, 0, 0, 0, 0, 0, 0, 0, 0, 0], [999, 0, 0, 0, 0, 0, 0, 0, 0, 0], [999, 0, 0, 0, 0, 0, 0, 0, 0, 0], [999, 0, 0, 0, 0, 0, 0, 0, 0, 0], [999, 0, 0, 0, 0, 0, 0, 0, 0, 0], [999, 0, 0, 0, 0, 0, 0, 0, 0, 0]]
В результате получается, чтопервый столбец каждой строки был изменен на 999. Это потому, что когда вы "умножили" list
, созданный на [column*[0]]
на row
, на самом деле вы получили row
экземпляровтого же list
.Поэтому, когда вы ссылаетесь на одного из них, вы обращаетесь ко всем из них, таким образом.Будьте осторожны с этим видом «умножения списков».