Foros del Web » Programando para Internet » Python »

Duda con matrices

Estas en el tema de Duda con matrices en el foro de Python en Foros del Web. Hola a todos, mi duda es esta: Si hago: Código: tablero = [ [0]*5 for y in range(5) ] tablero[0][0]=1 printTablero(tablero) La salida es: [1, ...
  #1 (permalink)  
Antiguo 08/06/2014, 10:14
 
Fecha de Ingreso: febrero-2014
Mensajes: 55
Antigüedad: 6 años, 3 meses
Puntos: 3
Duda con matrices

Hola a todos, mi duda es esta:

Si hago:
Código:
tablero = [ [0]*5 for y in range(5) ]
tablero[0][0]=1
printTablero(tablero)
La salida es:
[1, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]
[0, 0, 0, 0, 0]

Pero si hago:
Código:
tablero = [ [0]*5  ]*5
tablero[0][0]=1
printTablero(tablero)
La salida es:
[1, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
[1, 0, 0, 0, 0]
[1, 0, 0, 0, 0]

¿por qué pasa esto?

¿No hay alguna manera mas clara y sencilla de crear una matriz nxn, como a = [5][5] ?
Gracias y saludos
  #2 (permalink)  
Antiguo 08/06/2014, 18:46
 
Fecha de Ingreso: mayo-2013
Mensajes: 207
Antigüedad: 7 años
Puntos: 31
Respuesta: Duda con matrices

Que curioso lo que pasa. Supongo que en el segundo caso el último *5 es como si dijera que todos los listas son la misma y por eso se cambia en todas.

Python es un lenguaje de programación, no es otro maple o matlab. Para ello o bien te creas una función o clase para ello o utilizas modulos ya creados por otros, como por ejemplo numpy.
  #3 (permalink)  
Antiguo 09/06/2014, 12:55
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 7.321
Antigüedad: 15 años, 2 meses
Puntos: 1360
Respuesta: Duda con matrices

Lo que pasa es lo siguiente:

Cada vez que haces:
Código Python:
Ver original
  1. [x] * 3

Es equivalente a hacer
Código Python:
Ver original
  1. [x, x, x]

Lo que pasa aqui es que x, es una referencia a un objeto, que puede ser mutable o inmutable. Y en tu caso es mutable. Y por eso cada vez que cambias la un valor se ve reflejado en las demas filas. Por que son las mismas referencias.

Fuente: http://stackoverflow.com/questions/2...s-unexpectedly
  #4 (permalink)  
Antiguo 09/06/2014, 21:09
 
Fecha de Ingreso: febrero-2014
Mensajes: 55
Antigüedad: 6 años, 3 meses
Puntos: 3
Respuesta: Duda con matrices

Ok, gracias por las repuestas.

Saludos.
  #5 (permalink)  
Antiguo 10/06/2014, 13:39
 
Fecha de Ingreso: diciembre-2009
Ubicación: Spain
Mensajes: 180
Antigüedad: 10 años, 5 meses
Puntos: 9
Respuesta: Duda con matrices

Con este código puedes crear las listas con los elementos que necesites dentro de ellas. Eso sí, deberán ser los mismos en todas ellas:

Código Python:
Ver original
  1. elementos = int(input('Elementos dentro de las listas:  '))
  2. minilistas = int(input('Cuantas listas:  '))
  3.  
  4. lista = [[0] * elementos for i in range(minilistas)]
  5.  
  6. print(lista)

Luego, puedes modificar cada elemento de forma independiente. Con un simple:

lista[4][1] = 1

[[0, 0], [0, 0], [0, 0], [0, 0], [0, 1]]
  #6 (permalink)  
Antiguo 11/06/2014, 12:50
 
Fecha de Ingreso: febrero-2011
Mensajes: 54
Antigüedad: 9 años, 3 meses
Puntos: 18
Respuesta: Duda con matrices

Cita:
Iniciado por SARGE553413 Ver Mensaje

¿No hay alguna manera mas clara y sencilla de crear una matriz nxn, como a = [5][5] ?
Código Python:
Ver original
  1. import numpy
  2.  
  3. a = numpy.zeros((5,5))
  4. print a

Etiquetas: matrices
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 16:43.