Domina las comprehensions en Python para crear listas, diccionarios y sets de forma clara, compacta y eficiente. Aprende a filtrar números pares, unir listas con zip y eliminar duplicados con sets, aprovechando funciones globales como range y buenas prácticas de legibilidad. Además, compara rendimiento con time o timeit cuando lo necesites.
¿Qué son las comprehensions y por qué mejoran tu código?
Las comprehensions son un constructo para generar una secuencia a partir de otra secuencia. Permiten aplicar transformaciones y filtros de manera concisa y legible. En la práctica, reemplazan muchos for loops con una sola expresión y Python optimiza su ejecución internamente.
Tres tipos: list comprehension, dictionary comprehension y set comprehension.
Sintaxis por tipo: listas con corchetes []; diccionarios con llaves y pares clave: valor; sets con llaves y un solo valor.
Usos reales: filtrar números pares. Transformar elementos (por ejemplo, añadir texto). Unir listas para construir diccionarios. Eliminar duplicados con sets.
Rendimiento: si quieres comparar con un for loop, usa time o timeit.
Habilidades clave: legibilidad en nombres de variables. Uso de operadores como el módulo (%). Aprovechar funciones globales como range y zip. Entender que la condición en una comprehension es opcional.
¿Cómo filtrar y transformar listas con list comprehension?
Para practicar, se parte de una lista de números creada con range: al usar range(100), los valores son del 0 al 99. El objetivo: quedarnos solo con los pares mediante una condición.
# Generar números del 0 al 99lista_numeros =list(range(100))# Filtrar pares con list comprehensionpares =[numero for numero in lista_numeros if numero %2==0]print(pares)
Transformación y filtro en una línea.
Condición opcional: if numero % 2 == 0 filtra solo pares.
Legibilidad importa: usa nombres descriptivos como numero.
¿Cómo aplicar un filtro condicional y mantener legibilidad?
La estructura general es: [expresion for elemento in secuencia if condicion]. Aquí se aplica el operador módulo para verificar divisibilidad entre dos. Nombrar bien las variables facilita entender la intención y mantener el código claro.
¿Cómo crear diccionarios y sets con dictionary y set comprehension?
Más allá de listas, también puedes construir diccionarios y sets. Con diccionarios, une dos listas con zip. Con sets, elimina duplicados aprovechando que no aceptan repetidos.
¿Cómo unir dos listas con zip en un diccionario?
Se recomienda usar UID en lugar de ID (por ser palabra reservada) al nombrar identificadores. Con zip, emparejas IDs y nombres, y los conviertes en diccionario con una dictionary comprehension.
student_uid =[1,2,3]students =["Juan","José","Larsen"]# Unir listas con zip y crear diccionariostudents_with_uid ={uid: student for uid, student inzip(student_uid, students)}print(students_with_uid)# {1: 'Juan', 2: 'José', 3: 'Larsen'}
Clave: uid. Valor: student.
zip recorre ambas listas en paralelo.
La condición es opcional: úsala solo si necesitas filtrar pares clave-valor.
¿Cómo eliminar duplicados con un set comprehension?
Primero, genera números aleatorios con el módulo random usando un for loop y append. Luego, crea un set con una set comprehension para eliminar repetidos.
import random
# Generar 10 números aleatorios entre 1 y 3random_numbers =[]for i inrange(10): random_numbers.append(random.randint(1,3))# Eliminar duplicados con set comprehensionnon_repeated ={number for number in random_numbers}print(random_numbers)print(non_repeated)# contiene solo valores únicos
Un set no admite duplicados: al agregar, elimina repeticiones.
Patrón útil: lista con posibles repetidos → set para valores únicos.
Combina con filtros si necesitas restringir valores.
¿Tienes otro caso de uso para comprehensions en tu día a día? Cuéntalo en los comentarios y probemos variantes juntos.
No recuerdo si ya se había mencionado la función zip() en el curso, pero por si no se ha hecho, la función zip lo que hace es regresar un iterador de tuplas.
>>> x =[1,2,3]>>> y =[4,5,6]>>> zipped =zip(x, y)>>>list(zipped)[(1,4),(2,5),(3,6)]
En este link, que alguien más compartió, también se usa la función zip. En la sección técnicas de iteración
Querida comunidad, ¿alguno recomienda un libro para aprender las mejores reglas de sintaxis y legibilidad para programadores en Python?
Puedes comenzar con esta guía de estilos de programación con Python (PEP-8):
Gracias @CaroB!!!
Las ** list comprehension** : son maneras de escribir listas, diccionarios y conjuntos de manera compacta y legible,
Listas—> [element for element in element_list if element_meets_condition]
Diccionarios–> {key: element for element in element_list if element_meets_condition}
Conjuntos–> {element for element in element_list if elements_meets_condition}
EJEMPLOS:
- Generar lista de números de 1 al 100 y obtener los números pares(divisibles por dos):
lista_de_numeros= list(range(100))
**pares =[numero for numero in lista_de_numeros if numero % 2 == 0 ] —> list comprehension **
-Generar diccionario a partir de dos listas:
student_uid=[1,2,3]
students=[‘Natalia’,‘Luis’,‘Juan’]
students_and_uid={uid: student for uid, student in zip(student_uid,students)} --> {1: ‘Natalia’, 2: ‘Luis’, 3: ‘Juan’}
-Crear un conjunto (set) de números que no estén repetidos a partir de una lista con números repetidos:
random_numbers= [3, 3, 3, 3, 2, 2, 2, 2, 1, 2]
non_repeated={number for number in random_numbers} —> {1, 2, 3}
y el set simplemente pasandole la función set a random_numbers
código de la clase: Python comprehensions
<code>
#iterating con comprehensions
lista_de_numeros=list(range(100))pares =[numero for numero in lista_de_numeros if numero &2==0]#output# [0,1,2,3,..........,97,98,99]
#create dict con comprehensions
student_uid =[1,2,3]students =['juan','jose','larse']student_uid={uid: student for uid, student inzip(student_uid,students)}#output# {1:juan,2:jose,3: larse}#transform list to set con comprehensions
import random
random_numbers =[]for i inrange(10): random_numbers.append(random.randint(1,3))random_numbers
#output#[1,2,3,1,2,2,2,3,2,2]non_repeated ={number for number in random_numbers}#outputt#{1,2,3}</code>
Entiendo cuál es el punto al explicar el caso de los sets, pero hubiera sido más sencillo hacerlo así, ¿no?
non_repeated = set(random_numbers)
Supongo que los comprehensions sirven bastante para filtrar y transformar (como los filter, reduce y map en JS), excelente explicación igual :D
Exactly, es mejor como lo propones
No sabia que este estructura tenia ese nombre y la hbia utilizado para resolver el reto del update client de platzi ventas
En el ejemplo de los pares esta es una de las formas de definir el conjunto de números pares en Teoría de Conjuntos, en este caso en el rango [ 0, 100)
NOTA: [ 0, 100) esta escrito así intencionalmente.
Definición:
pares = { x | x/2 es entero} que es equivalente a
pares = { x | x mod(2) =0} = { x | x % 2 =0}
si consideramos el rango [0, 100)
pares = { x | (x % 2 = 0) & ( x en [0, 99] ) }
NOTA: x cumple con las dos condiciones:
a) x % 2 = 0
b) x está en el rango (0, 100)
pares = { x |
https://www.geeksforgeeks.org/comprehensions-in-python/
Les comparto una página que encontré para que puedan dar una revisión y hay un par de ejemplo de cada uno de los tres tipos de Comprehensions que se han brindado en la clase
debiria explicar que es el zip, ahora se que regresa unas tuplas pero si deberia explicarlo a groso modo
Buenas noches, la función zip permite emparejar el primer elemento de cada iterador luego a los segundos elementos y así sucesivamente.
jajja no sabia del keyword id que no se podia usar y yo matandome con el ejercisio anterior jajja bueno cosas que pasan jeje
Ya que estabamos con la clase de las comprehensions, en esta parte:
import random
random_numbers =[]for i inrange(10): random_numbers.append(random.randint(1,3))
se podria poner:
import random
random_numbers =[]random_numbers.append(random.randint(1,3)for x inrange(10))
En el Curso de Python Intermedio (dictado por Facundo), él explica con mejor detalle como funcionan las list comprehensions y dicts comprehensions
¡Qué poder de las compehensions! 😯. Les dejo esta web donde con un ejemplo comparan list comprehensionvsFor loop
"Usando list comprehension"h_letters =[]for letter in'human': h_letters.append(letter)print(h_letters)>>['h','u','m','a','n']
"Usando for loop"h_letters =[ letter for letter in'human']print( h_letters)>>['h','u','m','a','n']
Hasta el momento he entendido todo y sin problemas pero hubiera sido bueno que explicaras punto por punto como se estructuran los "comprehensions", igual que paso con el “zip” que solo lo fue usando de la nada sin ninguna explicación.
¿Podrías ampliar este conocimiento con otro video?
Hola Yesid! te dejo un enlace espectacular que explica a profundidad el tema, y presenta un ejercicio interesante para aprender bien un comprehension en Python. Cuentame si tienes alguna duda después de leer 😉