Foros del Web » Programación para sitios web » Python »

matriz + random (inicilizado) + for (=perdida de posiciones?)

Estas en el tema de matriz + random (inicilizado) + for (=perdida de posiciones?) en el foro de Python en Foros del Web. Buenas tardes tengo una duda sobre una matriz : Lleno la matriz con un random.randint (1,9) con 2 fors para la matriz es decir : ...
  #1 (permalink)  
Antiguo 05/02/2012, 06:14
 
Fecha de Ingreso: agosto-2011
Mensajes: 174
matriz + random (inicilizado) + for (=perdida de posiciones?)

Buenas tardes tengo una duda sobre una matriz :

Lleno la matriz con un random.randint (1,9) con 2 fors para la matriz es decir :

3 4 5 6
2 3 4 5
1 4 6 7
1 4 6 7

tendría que dar esto :

vector[0][0]=3
vector[1][1]=3
vector[2][2]=6
vector[3][3]=7

Pero me da

vector[0][0]=1
vector[1][1]=4
vector[2][2]=6
vector[3][3]=7

Que hago mal ? :S

Lo bueno es que antes de perder las posiciones con el random lo declaro arriba 2 fors y abajo hago 2 fors + para cojer esas posiciones pero nanai de la xina :)
  #2 (permalink)  
Antiguo 05/02/2012, 06:35
Avatar de _cronos2
Colaborador
 
Fecha de Ingreso: junio-2010
Mensajes: 2.052
Respuesta: matriz + random (inicilizado) + for (=perdida de posiciones?)

Pon el código que estás usando para que veamos dónde está el error.
Saludos (:
__________________
" Getting older’s not been on my plans
but it’s never late, it’s never late enough for me to stay. "
Cigarettes - Russian Red
  #3 (permalink)  
Antiguo 05/02/2012, 08:41
 
Fecha de Ingreso: agosto-2011
Mensajes: 174
Respuesta: matriz + random (inicilizado) + for (=perdida de posiciones?)

Cita:
Iniciado por _cronos2 Ver Mensaje
Pon el código que estás usando para que veamos dónde está el error.
Saludos (:
Perdón por tardar :)

Código Python:
Ver originalCopiar
  1. import random
  2. N=10
  3.  
  4. n=[[0]*N]*N
  5.  
  6. for x in range (0,N,1):
  7.     for i in range (0,N,1):
  8.         if(x==i):
  9.             n[x][i]=0
  10.         else:
  11.             n[x][i]=random.randint(1,9)
  12.         print n[x][i],
  13.     print
  14.  
  15. print n[0][0]
  16. print n[1][1]
  17. print n[2][2]
  18. print n[3][3]

Ahora lo he hecho con dos fors por provar :) , ahora pierdo las posiciones si o si :) alguna ayuda? :)

Última edición por drakgoku1; 05/02/2012 a las 09:18
  #4 (permalink)  
Antiguo 05/02/2012, 09:41
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 4.837
Respuesta: matriz + random (inicilizado) + for (=perdida de posiciones?)

Lo que pasa es como inicias tu matriz.
Código Python:
Ver originalCopiar
  1. [[0]*N]*N
La primera expresión [0] * N, devuelve una lista con N ceros, y los ceros al ser inmutables no pasa nada. Pero la segunda expresión devuelve N copias de listas con N ceros y las listas como es bien sabido, son mutables. Por eso si imprimes tu matriz veras que todas las filas son iguales.

Para evitar esto debes de hacer lo siguiente:
Código Python:
Ver originalCopiar
  1. [[0]*N for i in range(N)]
Para iniciar tu matriz.
  #5 (permalink)  
Antiguo 05/02/2012, 09:51
 
Fecha de Ingreso: agosto-2011
Mensajes: 174
Respuesta: matriz + random (inicilizado) + for (=perdida de posiciones?)

Cita:
Iniciado por razpeitia Ver Mensaje
Lo que pasa es como inicias tu matriz.
Código Python:
Ver originalCopiar
  1. [[0]*N]*N
La primera expresión [0] * N, devuelve una lista con N ceros, y los ceros al ser inmutables no pasa nada. Pero la segunda expresión devuelve N copias de listas con N ceros y las listas como es bien sabido, son mutables. Por eso si imprimes tu matriz veras que todas las filas son iguales.

Para evitar esto debes de hacer lo siguiente:
Código Python:
Ver originalCopiar
  1. [[0]*N for i in range(N)]
Para iniciar tu matriz.
Exactamente la instrucción que hace ?

Es que lo quiero para un ejercicio y tu condicion funciona de perlas , pero sin eso no puedo ? , es decir más simple :)

Creo entender que inicializas el vector 0 * N(posiciones) y corres a llegar a N ?

I can't understand correcly , please tell me :)
  #6 (permalink)  
Antiguo 05/02/2012, 09:56
Avatar de razpeitia
Moderador
 
Fecha de Ingreso: marzo-2005
Ubicación: Monterrey, México
Mensajes: 4.837
Respuesta: matriz + random (inicilizado) + for (=perdida de posiciones?)

Cita:
Iniciado por drakgoku1 Ver Mensaje
Exactamente la instrucción que hace ?

Es que lo quiero para un ejercicio y tu condicion funciona de perlas , pero sin eso no puedo ? , es decir más simple :)

Creo entender que inicializas el vector 0 * N(posiciones) y corres a llegar a N ?

I can't understand correcly , please tell me :)
Bueno es lo mas sencillo que hay (o por lo menos lo mas sencillo que se me ocurrió).

Lo que hace es un compresión de listas. Básicamente una matriz es una lista de listas, donde el primer indice es la fila y la segunda la columna.
¿Nuevo en el foro? Regístrate



La zona horaria es GMT -6. Ahora son las 23:49.
SEO by vBSEO 3.3.2