IIC2233 / Syllabus

140 stars 12 forks source link

Por qué pasa esto con las matrices cuando las defino de esta manera??? #133

Open EmanunamE opened 1 month ago

EmanunamE commented 1 month ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Contenido

No entiendo por qué cuando defino una matriz nula de la forma

matriz = [[0]5]5

Y quiero definir una coordenada, por ejemplo [2, 2]

matriz[2][2] = 1

El resultado me da una matriz donde su tercera columna son puros unos:

0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0

Quiero aclarar que estoy usando Python en su versión 3.11.7

BoPe3p commented 1 month ago

Hola, pongo un comentario, porque me pasa un caso similar (en la tarea). Eso sí, no defino la matriz así, sin embargo cuando corro los test cases y hago matriz[2][2] = 1, si agarra el elemento y no la columna entera, pero cuando corro el menú y quiero por ejemplo regar el predio, si toma la columna entera y no el elemento. No sé porque ocurre esto

bibarra9 commented 1 month ago

Hola. En el curso de introducción, en algún momento, tuve un problema similar al intentar definir una matriz en la que cada entrada era el string vacío; mi idea original era hacerlo de forma iterativa: primero cree una fila vacía y luego la agregué cierta cantidad de veces a una lista vacía para generar la matriz. El problema es que estás copiando en cada fila el mismo objeto, es decir, cada fila hace referencia al mismo dato guardado en la memoria, de tal manera que si modificas una entrada de una de las filas, se modifican todas porque todas las filas "son la misma". La forma en que solucioné el problema fue definir la lista vacía dentro de la iteración, para que en cada momento que se crea la fila esta sea nueva y no todas hagan referencia a la misma.

vgalfaro commented 1 month ago

Tal como dice su compañero, el error se debe a que estas copiando la referencia al mismo objeto (misma fila en este caso), entonces al editar alguna coordenada de cualquier fila, se editan todas, por lo que debes buscar otra manera de hacer, en lo personal prefiero hacer dos iteradores for, saludos!