Я объявляю динамический список M*N, пусть M =2, N =2
Elements = [[0]*M]*N
Мне необходимо на место определённого элемента поставить определённое значение, но элемент тоже вводится динамически, поэтому я могу проитерироваться через for:
for i in range(M):
for j in range(N):
if i == 0 and j == 0:
Elements[i][j] = 1000
print(Elements)
Я жду что выведет [[1000,0], [0,0]]
А-н нет [[1000,0],[1000,0]]
Вы немного неправильно создали список. При умножении, Вы получили не новый список, а ссылку на первый. Изменили первый список - изменили второй. Можно проверить через id()
Elements = [[0]*M]*N
print(id(Elements[0]) == id(Elements[1]))
Правильным вариантом будет нечто подобное:
Elements = [[0]*M for i in range(N)]
print(id(Elements[0]) == id(Elements[1]))
class cell:
def __init__(self, cross):
self.cross = cross
def output(self):
return self.cross
M, N = int(input('Enter M: ')), int(input('Enter N: '))
# M, N =2,2
# Points = [[0,0]]
Elements = []
elem = ''
Points = []
while elem != 'stop':
elem = input('enter next point: ')
Points.append([int(i) for i in elem.split() if elem != 'stop'])
del Points[-1]
for i in range(M):
Elements.append([])
for j in range(N):
if i == elem[0] and j == elem[1]:
Elements[i].append(cell(cross='crossed'))
else:
Elements[i].append(cell(cross='uncrossed'))
for i in range(M):
for j in range(N):
print(Elements[i][j].cross)