Listas por Comprensión en Python

Las listas por comprensión proporcionan una forma muy sencilla de crear listas a partir de secuencias (list/listas, tuple/tuplas, dict/diccionarios, set/conjuntos, str/cadenas). El uso más común de esta característica es el de construir listas, donde cada uno de sus elementos son el resultado de alguna operación aplicada a cada uno de los elementos de la secuencia, o para crear una sub-secuencia de elementos que cumplan ciertas condiciones.

Las listas por comprensión están compuestas por corchetes, los cuales encierran una expresión seguida por una cláusula for y, a continuación cero o más cláusulas for o cláusulas if.

Aquí tomamos una lista de números y retornamos una lista con sus cubos

>>> numeros = range(1, 5)     # Equivalente a 'numeros = [1, 2, 3, 4]'
>>> [x**3 for x in numeros]
[1, 8, 27, 64]

Podemos realizar operaciones tales como convertir una tupla de cadenas a una lista de enteros:

>>> cadenas = ("23", "2", "465")
>>> [int(x) for x in cadenas]
[23, 2, 465]

Lee el resto de esta entrada »

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 post 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 mas sencilla e intuitiva
matriz = []
for i in range(numero_filas):
    matriz.append([])
    for j in range(numero_columnas):
        matriz[i].append(None)

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

# Mal
matriz = [[None] * numero_columnas] * numero_filas

# 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)]

El recetario para mostrar matrices lo debo para una próxima entrega del blog 😉

Nota del pie:

La razón por la cual el código de la línea 14 esta mal es muy fácil de entender, Python evalúa una y solo una vez la expresión que posteriormente sera copiada y concatenada numero_filas-veces, es decir, la expresión

[[None] * numero_columnas]

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

matriz[i][j] = valor

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

Publicado en Recetas. Etiquetas: , , . Leave a Comment »