El mínimo de una matriz en Python

El día de ayer una muchacha que está estudiando en la Universidad me preguntó si podía ayudarla a realizar una asignación que le pidieron. La asignación le pide crear una matriz de 6 x 6 con números enteros de manera aleatoria  y luego conseguir cuál era el mínimo dentro de esa matriz.

Yo se que muchos me dirán bueno pero usa numpy y todo lo demás, creo que sería demasiado para este tipo de ejemplo, así que uso lo mas practico posible, listas.

Me pareció que era una buena manera de mostrar un poco de las baterías incluidas que tiene Python para este tipo de problemas y como en unas pocas líneas se puede realizar esta asignación.

Para el que viene del mundo de C, Java o PHP, vera la gran diferencia en la cantidad de líneas de código necesarias.

import pprint
import random

matriz = [random.sample(range(1000),6) for i in range(6)]
pprint.pprint(matriz)
print(min(map(min,matriz)))

Resultado

>>> 
[[253, 764, 863, 772, 993, 346],
 [123, 728, 719, 353, 961, 418],
 [226, 687, 211, 875, 963, 286],
 [256, 70, 565, 503, 730, 320],
 [188, 635, 324, 461, 216, 208],
 [781, 897, 115, 165, 818, 44]]
44
>>>

 

Expliquemos un poco, primero importamos pprnt el cual nos permite imprimir estructuras de datos de Python de una manera más bonita, de allí el nombre que viene de Pretty Print.

Luego importamos random, el cual nos permite generar números pseudo-aleatorios.

Creamos nuestra matriz usando comprensión de listas (list comprehensions) donde creamos 6 listas con números aleatorios entre 0 y 999 dentro de una lista.

Imprimimos nuestra matriz con pprint, de una manera elegante y legible.

Aquí viene lo divertido, utilizamos map para encontrar el mínimo en cada matriz, esto nos retorna una nueva lista con los mínimos, y luego encontramos el mínimo de esa nueva lista, el cual imprimimos.

Si se puede hacer de otra manera más elegante, adjúntela en los comentarios pero de una manera cordial.

Espero le ayude a alguien más.

You may also like...

  • Martin algañaraz

    Muy bueno miguel, me encanto, gracias por compartirlo 🙂