Comunidad de diseño web y desarrollo en internet

Crear matrices en Python utilizando listas

A diferencia de lenguajes como C, en Python no resulta intuitivo el proceso de creación de una matriz. Este tutorial está escrito con el objetivo de brindar una solución a este problema a través de la utilización de listas. A continuación, pongo a su disposición fragmentos de código que yo mismo he escrito y utilizado a la hora de implementar una matriz en mis scripts.

La característica común a los métodos presentado a continuación es que nuestra matriz, llamada apropiadamente "matriz" es una lista de python.

El primer método inserta en matriz numero_filas listas como elementos de ésta. A continuación, para cada lista en matriz, son insertados numero_columnas elementos None en cada una de ellas.

Código :

# La mas sencilla e intuitiva
matriz = []
for i in range(numero_filas):
    matriz.append([])
    for j in range(numero_columnas):
        matriz[i].append(None)


En este método, matriz hace referencia a una lista con numero_filas elementos None, luego se procede a hacer que cada posición de matriz haga referencia a una lista con numero_columnas elementos None.

Código :

# Menos intuitiva pero mas eficiente
matriz = [None] * numero_filas
for i in range(numero_filas):
    matriz[i] = [None] * numero_columnas


En esta ocación se utiliza una característica muy interesante y poderosa de Python, listas por comprensión. Cada elemento de la lista matriz será a su vez una lista de tamaño numero_columnas, generada por la función range de Python. Al iterar numero_filas veces ésta función, nos aseguramos de que matriz tenga numero_filas filas.

Código :

# Versión mas compacta
matriz = [range(numero_columnas) for i in range(numero_filas)]

# Variación de la anterior
matriz = [[None] * numero_columnas for i in range(numero_filas)]


Podrías estar tentado a hacer lo siguiente

Código :

matriz = [[None] * numero_columnas] * numero_filas


¡Ésto esta mal! Python evalúa una y solo una vez la expresión que posteriormente será copiada y concatenada numero_filas-veces, es decir, la expresión

Código :

[[None] * numero_columnas]


siempre hará referencia a la misma lista y en consecuencia al escribir

Código :

matriz[i][j] = valor


estaremos modificando más de una celda a la vez (porque dichas celdas harán referencia al mismo objeto).

Publica tu comentario

o puedes...

¿Estás registrado en Cristalab y quieres
publicar tu URL y avatar?

¿No estás registrado aún pero quieres hacerlo antes de publicar tu comentario?

Registrate