Вот матрица 3 * 4, представленная встроенным списком, когда я пытаюсь присвоить dp[0][0][0] = 1
, она изменяет все первые значения каждого элемента списка.
Я использую python 3.7, не знаю, в чем проблема.
Я хочу изменить первое значение первого [0,0,0,0] на 4
dp = [[[0,0,0,0]] * 3] *4
dp[0][0][0] =4
print(dp)
вывод такой
[[[4, 0, 0, 0], [4, 0, 0, 0], [4, 0, 0, 0]], [[4, 0, 0, 0], [4, 0, 0, 0], [4, 0, 0, 0]], [[4, 0, 0, 0], [4, 0, 0, 0], [4, 0, 0, 0]], [[4, 0, 0, 0], [4, 0, 0, 0], [4, 0, 0, 0]]]
Вы делаете это так:
dp = [[[0,0,0,0] for y in range(3)] for i in range(4)]
dp[0][0][0] =4
print(dp)
Выход:
[[[4, 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] for _ in range(3)] for _ in range(4)]
, чтобы списки каждый раз переоценивались. Умножение списков таким образом не приведет к клонированию списка, а только создаст 2 ссылки на один и тот же объект.