Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: Yidu en 8 Abril 2015, 19:34 pm



Título: [PYTHON] Saber si un elemento esta en una matriz
Publicado por: Yidu en 8 Abril 2015, 19:34 pm
Hola.

Antes de postear he dudado en hacerlo. Porque supongo que la solución será muy fácil. Pero por más que le doy vueltas no doy con la tecla.

Para saber si un elemento esta en una lista o vector, solo hemos de hacer así:

Código
  1. num = 4
  2. lista = [1,2,3,4,5]
  3. num in lista

Y nos devuelve True.

¿Pero como hacerlo 'fácil' si hemos de hacer la comprobación en una matriz?

Código
  1. num = 4
  2. matriz = [[1,2,3],[4,5,6],[7,8,9]]
  3. num in lista

Logicamente nos devolverá False. Ya que comprobará el número 4 con una lista o vector entero.

Hacer esto, no lo veo del todo bien:

Código
  1. num in matriz[0] or num in matriz[1] or num in matriz[2]

Y si usamos un ciclo For, como el número a comprobar esta en matriz[1], nos devolverá False. Ya que la variable de control del For se detendrá en matriz[2]. Y como allí no esta el 4, dará False.

La pregunta, es, ¿Cómo enfocarlo en estos casos?


Bueno, saludos!


Título: Re: [PYTHON] Saber si un elemento esta en una matriz
Publicado por: Eleкtro en 8 Abril 2015, 19:59 pm
¿Pero como hacerlo 'fácil' si hemos de hacer la comprobación en una matriz?

Código
  1. num = 4
  2. matriz = [[1,2,3],[4,5,6],[7,8,9]]
  3. num in lista

Para determinar si un valor se encuentra en el interior de ese array dimensional hay varias maneras de hacerlo, una manera simple sería utilizando la función any:

Código
  1. value = 4
  2. arr2D = [
  3.           [1, 2, 3],
  4.           [4, 5, 6],
  5.           [7, 8, 9]
  6.        ]
  7.  
  8. print any(value in arr for arr in arr2D)

➢ https://docs.python.org/2/library/functions.html#any

Saludos


Título: Re: [PYTHON] Saber si un elemento esta en una matriz
Publicado por: Yidu en 9 Abril 2015, 19:19 pm
¡Muchas gracias! Que simple. Con las vueltas que le dí. Tendré que echar mas de un vistazo a las built-ins. En todo caso me equivoque en esta línea:

Código
  1. num = 4
  2. matriz = [[1,2,3],[4,5,6],[7,8,9]]
  3. num in lista # Aquí debería haber puesto:


Código
  1. num in matriz

Tu línea la he modificado para Python 3:

Código
  1. print (any(value in arr for arr in arr2D))

Por si alguien usa esta versión y le da error. Supongo que otra forma sería definiendo nosotros la función. Como cita en el ejemplo del enlace que has posteado.

¡Saludos!