en Programación

Cosas no tan obvias de Python (Parte I)

Me introduje a la programación hace varios años con lenguajes muy básicos, desde hace unos 6 años me he dedicado al desarrollo de varios proyectos utilizando Python. Sin embargo, por mucho que el Zen de Python diga que «Debería haber una —y preferiblemente sólo una— manera obvia de hacerlo», lo cierto es que algunas cosas no son tan obvias.

Así que aquí les va la primera parte de cosas no tan obvias de la programación con Python con las que me pude haber evitado toneladas de código redundante.

Condicionales de una línea (operaciones ternarias).

A veces es necesario hacer validaciones muy sencillas con condicionales, mi viejo código pecaba de redundancia en éste aspecto:

# Como yo lo hacía antes:
if x < 56:
    something = "Dafaq"
else:
    something = "Nope"

# -------------------------

# Nada más simple que poner:
something = "Dafaq" if x < 56 else "Nope"

Filtrado de listas en una sola línea (comprensión de listas).

Una de las situaciones más comunes en el día a día con Python es la necesidad de filtrar listas, lo cual se puede convertir en una verdadera fiesta. Hay maneras elegantes y potentes de hacerlo, pero aquí les expongo al menos dos:

# La "obvious way":
a = [2, 24, 88, 32, 1, 6, 88, 10, 15, 34]  # sample list.
b = []
for i in a:
    if i >= 15:
        b.append(i)

# -------------------

# La vía estilo pythonesco:
a = [2, 24, 88, 32, 1, 6, 88, 10, 15, 34]  # sample list.
b = [i for i in a if i >= 15]

# La vía elegante con lambdas:
a = [2, 24, 88, 32, 1, 6, 88, 10, 15, 34]  # sample list.
b = filter(lambda i: i >= 15, a)

Sumar valores de una lista.

Otra cosa muy recurrente es que a veces necesitamos sumar los valores almacenados en alguna lista (por ejemplo, una lista de totales numéricos).

# A la vieja usanza:
amounts = [2, 24, 88, 32, 1, 6, 88, 10, 15, 34]  # sample list.
total = 0
for i in amounts:
    total += i

# ------------------------------

# La obviedad ante las narices:
amounts = [2, 24, 88, 32, 1, 6, 88, 10, 15, 34]  # sample list.
total = sum(amounts)

¡Escríbeme algo bonito!