Introducci贸n

1

El Zen de Python

Conjuntos

2

Sets

3

Modificando conjuntos

4

Operaciones con conjuntos

5

Playgrounds: Elimina elementos duplicados usando conjuntos

Comprehensions

6

List Comprehension

7

Dictionary Comprehension

8

Dictionary Comprehension: condition

9

Playgrounds: Crea una lista usando List Comprehension

10

Lists vs. Tuples vs. Sets

Funciones

11

Funciones

12

Funciones: return

13

Par谩metros por defecto y m煤ltiples returns

14

El scope

15

Refactor game

16

Playgrounds: Tienda de Tecnolog铆a

17

Funciones an贸nimas: lambda

18

Higher order function: una funci贸n dentro de otra funci贸n

19

Map

20

Map con diccionarios

21

Reto: map con inmutabilidad

22

Playgrounds: Multiplica todos los elementos por dos

23

Filter

24

Playgrounds: Retorna solo palabras de 4 letras y m谩s

25

Reduce

M贸dulos

26

M贸dulos

27

Mis propios m贸dulos

28

M贸dulos como scripts: __name__ y __main__

29

Paquetes

30

Playgrounds: Calcular la suma de todas las compras

Manipulaci贸n de archivos y errores

31

Iterables

32

Errores en Python

33

Manejo de excepciones

34

Playgrounds: Captura la excepci贸n: ZeroDivisionError

35

Leer un archivo de texto

36

Escribir en un archivo

37

Leer un CSV

38

Playgrounds: Lee un CSV para calcular el total de gastos

Gr谩ficas en Python

39

Creando una gr谩fica

40

Reto: graficando la poblaci贸n de un pa铆s

41

Reto: graficando la poblaci贸n mundial

Pr贸ximos pasos

42

隆Conoce otros proyectos de este curso!

43

Reconoce tu proceso y certif铆cate

44

Toma el Curso de PIP y Entornos Virtuales con Python

No tienes acceso a esta clase

隆Contin煤a aprendiendo! 脷nete y comienza a potenciar tu carrera

List Comprehension

6/44
Recursos

Aportes 101

Preguntas 17

Ordenar por:

驴Quieres ver m谩s aportes, preguntas y respuestas de la comunidad?

o inicia sesi贸n.

Ejemplo de los d铆as con letra 鈥榓鈥

for :

days = ["lunes", "martes", "miercoles", "jueves", "viernes", "sabado", "domingo"]
newlist = []

for i in days:
  if "a" in i:
    newlist.append(i)

print(newlist) #["martes", "sabado"]

List Comprehension

days = ["lunes", "martes", "miercoles", "jueves", "viernes", "sabado", "domingo"]

newlist = [i for i in days if "a" in i]

print(newlist) # ["martes", "sabado"]

驴Encerio crees que ya comprendiste el tema?

Te tengo un reto para comprobarlo

Entra a este reto de hackerRank y pon a prueba lo aprendido 馃槑

Pista:

>>> print([[x, y] for x in [1, 2, 3] for y in [4, 5, 6]])
[[1, 4], [1, 5], [1, 6], [2, 4], [2, 5], [2, 6], [3, 4], [3, 5], [3, 6]]

Si requieres un empujoncito para pasar el reto, te recomiendo que veas la pesta帽a de tutorial de HackerRank (En la parte inferior izquierda o superior derecha).

List Comprehension

Si quieren cambiarle el nombre a una variable que esta en varias partes del c贸digo

.
Basta con poner el cursos al comienzo de esa variable, presionar Ctrl + F2 y luego F2. Te saldra un cuadrito de texto pidiendo el nuevo nombre:
.

.
el cambio se aplicara en todas las variables con el mismo nombre.
.

Comprensi贸n de lista:

  • Es una lista que tiene por contenido una operaci贸n en vez de una lista de conjuntos, y estas operaciones se realizan con un for para poder iterar y sacar los datos de la lista, y esta lista tiene la siguiente forma:

Tambi茅n podemos buscar si hay ciertos elementos dentro la lista con el comando 鈥渋n鈥 de la siguiente manera, 鈥淓lemento a buscar - in - nombre de la lista鈥.

Wow, s铆 que facilita la legibilidad del c贸digo.

As铆 tom茅 mis apuntes en Word:
Yo c贸mo entiendo esto? Como si tuviese una cantidad de gallinas, y quisiera ver una gallina una a una detalladamente y hacerle algo una a cada a una. Para hacer esto, s茅 cu谩ntas gallinas tengo, se lo digo en el RANGE(1,11) pues estamos diciendo que tiene diez gallinas, por lo que le estoy diciendo que tendr谩 que tomar gallina una a una diez veces distintas. La escritura del c贸digo ser铆a 鈥淕allina a Gallina鈥, que en ingl茅s es igual a 鈥淕allina for Gallina鈥, o 鈥淓lement for Element鈥. Asi que el c贸digo le dice que tome gallina a gallina en un rango del 1 al 10 a trav茅s de: element for element in range [1,11].
Ya la manera de lenguaje se torna m谩s literal y me gusta.

Qu茅 chulada la de Python

Otra clase que es una maravilla:

list_v1 = []

for i in range(1,11):
  list_v1.append(i * 2)

print(list_v1)

list_v2 = [i * 2 for i in range(1,11)]
print(list_v2)


list_v3 =[i * 2 for i in range(1,101) if i % 3 == 0]
print(list_v3)

A lo que vine a este curso, a empaparme de list comprehensions

Esta clase me frustr贸 un poco porque no entendia toda esta rama de los Comprehensions, le pregunt茅 a chatGPT que me diera una definicion y me dio esto
Las comprehensions de Python son una forma concisa y legible de crear listas, conjuntos y diccionarios en una sola l铆nea de c贸digo. La sintaxis b谩sica de las comprehensions es la siguiente:

Lista comprehension: [expresi贸n for elemento in iterable]
Conjunto comprehension: {expresi贸n for elemento in iterable}
Diccionario comprehension: {clave: valor for elemento in iterable}

Espero les sirva 馃槂

Hice un ejemplo usando nombres de participantes de una carrera y filtre a aquellos que tengan la letra n (ya sea min煤scula o may煤scula).

#Hagamos un ejemplo diferente: Supongamos que queremos hacer una lista de los nombres de todos los participantes de una carrera pero s贸lo de aquellos que tengan la letra N
race_participants = ["Juan", "Maricela", "Pedro", "Erick", "Betzabet", "Carlos", "Nicolas", "Ramon", "Mabel", "Stan", "Diana"]

#Veamoslo de una forma intuitiva primero
n_names = []

for name in race_participants:
  if "n" in name.lower():
    n_names.append(name)

print(n_names)

#Ahora, hagamoslo con list comprehension
n_names_2 = [name for name in race_participants if "n" in name.lower()]

print(n_names_2)

Algunos ejemplos de m谩s, espero les guste:

**El c贸digo **

    one = [ x**2 for x in [1,2,3] ]
    #[1,4,9]

    two = [ x/2 for x in [4,5,6,7,2,7,3,8,2] if x > 5 ]
    #[3.0, 3.5, 3.5, 4.0]

    three = [ f'{x}_{x}' for x in 'Tu nombre aqu铆']
    #['T_T', 'u_u', ' _ ', 'n_n', 'o_o', 'm_m', 'b_b', 'r_r', 'e_e', ' _ ', 'a_a', 'q_q', 'u_u', '铆_铆']

    four = [ f'{x}_{x}' for x in 'Quitamos los espacios' if x!= ' ']
    #['Q_Q', 'u_u', 'i_i', 't_t', 'a_a', 'm_m', 'o_o', 's_s', 'l_l', 'o_o', 's_s', 'e_e', 's_s', 'p_p', 'a_a', 'c_c', 'i_i', 'o_o', 's_s']

    text = 'The powerful of python'
    five = [ord(x) for x in text]
    #[84, 104, 101, 32, 112, 111, 119, 101, 114, 102, 117, 108, 32, 111, 102, 32, 112, 121, 116, 104, 111, 110]

    sixe = [(x + 5 if x > 4 else x -10) for x in range(1,11)]
    #[-9, -8, -7, -6, 10, 11, 12, 13, 14, 15]

    seven = ["Python3"[i::-1] for i in range(7)]
    #['P', 'yP', 'tyP', 'htyP', 'ohtyP', 'nohtyP', '3nohtyP']
    ma = [1,2,3,4,5]
    mb = [6,7,8,9,0]
    eight = [x*y for x in ma for y in mb]
    #[6, 7, 8, 9, 0, 12, 14, 16, 18, 0, 18, 21, 24, 27, 0, 24, 28, 32, 36, 0, 30, 35, 40, 45, 0]
    
    nine = [[x for x in range(y+2)] for y in range(4)]
    #[[0, 1], [0, 1, 2], [0, 1, 2, 3], [0, 1, 2, 3, 4]]

En el 2021, a fines, estudi茅 con otro profesor y me hizo entenderlo de este forma:

element for element in range(1, 11)

Para cada element dentro del rango del 1 al 11, voy a agregarle un element

i * 2 for i in range(1, 11) if i % 2 == 0

Para cada i en el rango del 1 al 11, voy a agregarle una i multiplicada por 2, solo y cuando i % 2 sea igual a 0

Love you

List Comprehension permite a trav茅s de una sintaxis corta crear una nueva lista basada en los valores de una lista existente.

Agradezco mucho la simplicidad con la que explicas el uso de
"for" para mi fue una funci贸n muy dif铆cil de entender y contigo queda demasiado claro.

Hola les comparto un peque帽o c贸digo que hice para solucionar un code chalenge.

b谩sicamente el reto era ingresar 3 n煤meros, el cuarto lo guardamos en n, hab铆a que guardar en una lista de listas las combinaciones de los 3 n煤meros que su suma fuera diferente a n, con este ejercicio me quedo mucho m谩s claro el tema de lists comprehensions.

x = int(input())
y = int(input())
z = int(input())
n = int(input())
    
permutations = [[i,j,k] for i in range(0,x+1) for j in range(0,y+1) for k in range(0,z+1) if i+j+k != n]
    
print(permutations)

Hola. aqui aprendiste el concepto de List Comprehension y como se crea mas no para que se usa y porque deberias usarlo.
CONCEPTO: el concepto de List comprehension es que es una nueva estructura de datos en Python mas avanzada que te permite agrupar una linea de codigo en algo mas legible y compacta en tu programa.
COMO SE CREA: variable = [i for i in iterable] #ejemplo

tu podrias crear la linea de codigo asi:

lista = []

for num in range(1,20):
    lista.append(num*2)
print(lista)    

se lee: Creamos una lista vacia que va a contener los valores recorridos por el ciclo for en el rango de 1 a 20 que seran llamados num, la lista vacia va a agregar a cada uno de esos numeros devueltos como multiplicacion en 2
y finalmente se emprime la lista.

todo eso lo puedes hacer (sin tener necesidad de escribir append).

lista = [num*2 for num in range(1,20)]
print(lista)

y es exacatamente lo mismo.

Pero digamos en caso tal que tenga varias condiciones, 7 por ejemplo, creo que al final tendr铆amos una l铆nea de c贸digo muy larga, y para leer la l铆nea ser铆a complejo no?. Para usar la list comprehension depende del contexto, porque tambi茅n puede ser mejor la forma tradicional

hace alg煤n tiempito aprend铆 List Comprehension.
La verdad es que es una buena manera de hacer el c贸digo legible.
Procuro usarlo seguido.

hola:

#estructura con condicion: [element for element in iterable if condition]
#Forma tradicional:
print('Forma Tradicional:')
numbers = [] 
for i in range(1,11):
  if i % 2 == 0:
    numbers.append(i *2)

print(numbers)
print('-'*10)
#Forma de list comprehension
print('Forma con list comprehension:')
numbers_v2 = [i *2 for i in range(1,11) if i % 2 == 0]
print(numbers_v2)
print('-'*10)

List Comprehension

[element for element in iterable]

  • Element: variable que se va a agregar a la lista
  • For: ciclo for que va a recorrer el iterable
  • Iterable: objeto que se va a recorrer, puede ser una lista, tupla, diccionario, etc
# List Comprehension
numbers = [element for element in range(0, 101)]
print(numbers)

Un aporte extra

'''
numbers = []
for element in range(1, 11):
  numbers.append(element * 2)

print(numbers)


numbers_v2 = [element * 2 for element in range(1, 11)] # iterar un rango con menos lineas de codigo y legibles
print(numbers_v2)
'''
numbers = []
for i in range(1, 11):
  if i % 2 == 0:
    numbers.append(i * 2)

print(numbers)

numbers_v2 = [i * 2 for  i in range(1, 11) if i % 2 == 0]
print(numbers_v2)


Para obtener los n煤meros que son m煤ltiplos de 5 menores a 50

numbers_m5 = []
for i in range(1, 50):
  if i % 5 == 0:
    numbers_m5.append(i)
print(numbers_m5)

List Comprehension

numbers_m5 = [i for i in range(1, 50) if i % 5 == 0]
print(numbers_m5) 

Ya lo hab铆a visto en la documentaci贸n gracias Profe Nico, mucho mas claro.

Notas de clase

numbers = []
for element in range(1, 11):
  numbers.append(element*2)
print(numbers)

#Utilizando List Comprehension
numbers_v2 = [element*2 for element in range(1,11)]
print(numbers_v2)

#con condicional
numbers = []
for i in range(1, 11):
  if i % 2 == 0:
    numbers.append(i)
print(numbers)

#Utilizando List Comprehension
numbers_v2 = [i for i in range(1,11) if i % 2 == 0]
print(numbers_v2)
# Se crea una lista con una list comprehension; en donde, se recorre un rango de 10 n煤meros.
# Se comprueba que estos numeros sean divisibles por tres.
# Se eleva al cuadrado el numero final y se guarda en la lista
my_list: list = [i ** 2 for i in range(1,11) if i % 3 == 0]
print(my_list)

countries = {鈥淢X鈥, 鈥淐OL鈥, 鈥淎RG鈥, 鈥淯SA鈥潁
northAm = {鈥淯SA鈥, 鈥淐ANADA鈥潁
centralAm = {鈥淢X鈥, 鈥淕T鈥, 鈥淏Z鈥潁
southAm = {鈥淐OL鈥, 鈥淏Z鈥, 鈥淎RG鈥潁

new_set = set(countries | northAm | centralAm | southAm)

print(new_set)

#Saludos Nicolas Molina

mi ejercicio de prueba:

pares = []
for par in range(1, 101):
  if par % 2 == 0:
    pares.append(par)
print(pares)

#list comprehention
imparess = [impares for impares in range(1, 101) if impares % 2 != 0]
print(imparess)

Use un metodo para crear un nuevo array con nombres que no empezaran con la letra 鈥渄鈥.

arr = ["daniel", "daria","jose","ernesto"]

 newArr = [element for element in arr if not element.startswith("d")]

OUTPUT:
["jose", "ernesto"]

Realmente se me hace dificil entenderlo por el momento 馃槩

tuve que ver varias veces esta clase. definitivamente leer la sintaxis es un poco complejo para nosotros lo principiantes, pero una vez que logras comprender da una gran satisfacci贸n.

Les comparto este peque帽o reto para practicar list comprehensions:

Crear un set con los n煤meros del 1 al 1000, y mostrar los n煤meros que son divisibles entre 7 pero no entre 5.:


鈥 Posible respuesta:

def div():
  list = [x for x in range(1,1001)]
  list2 = [x for x in list if x % 7 == 0 and x % 5 != 0]
  set1 = set(list2)
  return set1

print(div(), end=" ")

List Comprehension

En Python, las comprensiones (comprehensions) son una forma concisa y elegante de construir una nueva lista, conjunto o diccionario a partir de otra colecci贸n de datos utilizando una sintaxis compacta.

Existen tres tipos de comprensiones en Python:

Comprehensions de lista

La comprensi贸n de lista (list comprehension) es una forma de construir una nueva lista a partir de otra lista o cualquier otra colecci贸n de datos iterable. Su sintaxis es la siguiente:

nueva_lista = [expresion for elemento in iterable if condicion]

  • expresion: es una expresi贸n que define c贸mo se deben transformar los elementos originales.
  • elemento: es una variable que toma los valores de cada elemento de la colecci贸n original.
  • iterable: es una colecci贸n de datos iterable, como una lista, tupla o conjunto.
  • condicion (opcional): es una condici贸n que filtra los elementos de la colecci贸n original.

Por ejemplo, para crear una nueva lista que contenga el cuadrado de los n煤meros pares de una lista original, podemos usar una comprensi贸n de lista de la siguiente manera:

numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
cuadrados_pares = [x**2 for x in numeros if x%2 == 0]
print(cuadrados_pares)  # Salida: [4, 16, 36, 64, 100]

Se siente muy satisfactorio cuando luego un tiempo atras ver esa chorrera de cosas impactaba no poder saber que era y que ahora haces esa chorrera y la puedes leer:
Disfruten el aprendizaje ya que ese es el valor de la clave : exito 馃槀 (like si captaste el sublime):

Excelente explicaci贸n 馃憦馃憦馃憦

Los hice con colores

#Primero
colors = ['green', 'blue', 'yellow', 'red', 'orange', 'pink', 'purple', 'gray']
colors_v2 = []
for element in colors:
    if 'e' in element:
        colors_v2.append(element)
print(colors_v2)

#Segundo
colors = ['green', 'blue', 'yellow', 'red', 'orange', 'pink', 'purple', 'gray']
colors_v2 = [element for element in colors if 'e' in element]
print(colors_v2)

Python 馃敟

Las List Comprehensions (Comprensiones de Listas) son una caracter铆stica poderosa y compacta en Python que te permite crear listas de manera concisa utilizando una sola l铆nea de c贸digo. Son especialmente 煤tiles cuando deseas aplicar una operaci贸n o una transformaci贸n a cada elemento de una secuencia (como una lista) y crear una nueva lista basada en esos elementos transformados. Las List Comprehensions se componen de tres partes clave:
[expresi贸n for elemento in iterable if condici贸n]

  1. Expresi贸n: La expresi贸n que se eval煤a para cada elemento de la secuencia y se utiliza para crear los elementos de la nueva lista.
  2. Secuencia de Origen: La secuencia de la cual se toman los elementos para aplicar la expresi贸n. Puede ser una lista, una cadena, una tupla o cualquier otro iterable.
  3. Filtros (opcional): Puedes agregar filtros condicionales para seleccionar solo los elementos que cumplan ciertas condiciones.

A continuaci贸n, te mostrar茅 algunos ejemplos de List Comprehensions para que puedas comprender mejor c贸mo funcionan:

Ejemplo 1: Crear una lista de cuadrados de n煤meros del 0 al 9:

pythonCopy code
cuadrados = [x ** 2 for x in range(10)]
# cuadrados contendr谩 [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Ejemplo 2:` Filtrar n煤meros pares de una lista:

pythonCopy code
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
pares = [x for x in numeros if x % 2 == 0]
# pares contendr谩 [2, 4, 6, 8, 10]

Ejemplo 3: Crear una lista de palabras con m谩s de 3 letras:

pythonCopy code
palabras = ["hola", "Python", "es", "genial"]
mas_de_tres_letras = [palabra for palabra in palabras if len(palabra) > 3]
# mas_de_tres_letras contendr谩 ["hola", "Python", "genial"]

Ejemplo 4: Convertir una lista de temperaturas de grados Celsius a Fahrenheit:

pythonCopy code
celsius = [0, 10, 20, 30, 40]
fahrenheit = [(c * 9/5) + 32 for c in celsius]
# fahrenheit contendr谩 [32.0, 50.0, 68.0, 86.0, 104.0]

Las List Comprehensions son una forma elegante y legible de crear listas y aplicar transformaciones a los elementos de una secuencia. Son ampliamente utilizadas en Python y te ayudan a escribir c贸digo m谩s conciso y eficiente.

numbers2 = [i for i in range(1,11) if i % 2 == 0]
print(numbers2)

馃槉馃崗
Comparto mi c贸digo donde utilizo List Comprehension
para ubicar a los alumnos destacados y notas destacadas del diccionario.

alumnos_notas = {
    "carlos" : 20,
    "Diego" : 17,
    "Erick" : 17,
    "Angelo" : 19,
    "Gabriela" : 18,
    "Ana" : 15
}

#De forma clasica
alumnos_destacados_1 = []

for alumno, notas in alumnos_notas.items():
    if notas > 17:
        alumnos_destacados_1.append(alumno)

print(alumnos_destacados_1) #['carlos', 'Angelo', 'Gabriela']

#Utilizando List Comprehension, alumnos destacados
alumnos_destacados_2 = [alumno for alumno, nota in alumnos_notas.items() if nota > 17]

print(alumnos_destacados_2) #['carlos', 'Angelo', 'Gabriela']

#Utilizando List Comprehension, notas destacadas
tercio_superior = [notas for notas in alumnos_notas.values() if notas > 17] 
print(tercio_superior) # [20, 19, 18]

numbers_v2 = list(range(21, 31))
print(numbers_v2)
Esta operacion me sale el mismo resultado les comparto

Resoviendo un ejercicio con List Comprehensions

Estoy practicando y busque en internet ejercicios de algoritmos para yo resolverlos con lo que estoy aprendiendo en Python. Al terminar esta clase me di cuenta que pude resolver m谩s f谩cil un algoritmo que ya hab铆a hecho, as铆 que regrese e hice una segunda versi贸n.
El ejercicio es:

馃毃 Desarrolle un algoritmo que lea los primeros 300 n煤meros enteros y determine cu谩ntos de ellos son impares; al final deber谩 indicar su sumatoria.

Mi versi贸n Inicial era:

sum = 0
for i in range(1, 301):
    if (i / 2) - float(i // 2) == 0.5:
        print(i)
        sum = sum + i

print('La sumatoria de los n煤meros inpares del 1 al', i, 'es 馃憠', sum)

Mi versi贸n con List Comprehension es:

suma = 0
impares = [i for i in range(1, 301) if i % 2 != 0]
for n in impares:
    suma = suma + n

print(impares, 'La sumatoria de los n煤meros inpares del 1 al', i, 'es 馃憠', suma)

Conclusiones: al parecer son casi las misma lineas de c贸digo pero鈥 en list comprehensions es m谩s sencillo de leer, adem谩s al desplegar los resultados en pantalla, se logra de una forma m谩s ordenada.

Pueden revisar en mi GitGub los ejercicios que voy realizando

https://github.com/josealpantoja/ejercicios_algoritmos_python/

Si quieren practicar, aqui les dejo los ejercicios de algoritmos Aqu铆 馃

List comprehension - Chat Gpt


La comprensi贸n de listas (list comprehension en ingl茅s) es una caracter铆stica poderosa de Python que te permite crear listas de manera concisa y elegante utilizando una sintaxis compacta. Es especialmente 煤til cuando deseas aplicar una operaci贸n o filtrar elementos en una lista existente para crear una nueva lista.

La sintaxis b谩sica de una comprensi贸n de listas es la siguiente:

nueva_lista = [expresion for elemento in lista_original if condicion]

Donde:

  • expresion es el resultado que se agrega a la nueva lista para cada elemento que cumple con la condicion.
  • elemento es cada elemento de la lista_original que se est谩 procesando.
  • condicion es una expresi贸n opcional que filtra los elementos de la lista_original antes de aplicar la expresion.

Aqu铆 hay algunos ejemplos para ilustrar c贸mo funcionan las comprensiones de listas:

  1. Creaci贸n de una lista de cuadrados:
numeros = [1, 2, 3, 4, 5] 
cuadrados = [x ** 2 for x in numeros] 
# Resultado: [1, 4, 9, 16, 25]
  1. Filtrado de elementos pares:
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
pares = [x for x in numeros if x % 2 == 0] 
# Resultado: [2, 4, 6, 8, 10]
  1. Creaci贸n de una lista de pares (x, y):
x_vals = [1, 2, 3] 
y_vals = [10, 20, 30] 
pares = [(x, y) for x in x_vals for y in y_vals] 
# Resultado: [(1, 10), (1, 20), (1, 30), (2, 10), (2, 20), (2, 30), (3, 10), (3, 20), (3, 30)]
  1. Uso de expresiones condicionales:
numeros = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 
resultado = [x if x % 2 == 0 else "impar" for x in numeros] 
# Resultado: ['impar', 2, 'impar', 4, 'impar', 6, 'impar', 8, 'impar', 10]

Las comprensiones de listas son una forma compacta y legible de crear listas y realizar transformaciones en los elementos. Sin embargo, debes tener cuidado de no exagerar en la complejidad de la expresi贸n para mantener la legibilidad. Si la comprensi贸n se vuelve demasiado complicada, podr铆a ser m谩s adecuado utilizar un enfoque m谩s tradicional con bucles y condiciones separados.

Dejo mi aporte:

numbers_v1,1 = []
for element in range(1,11):
  numbers.append(element)

print(numbers_v1,1) R// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Estas cansado de hacer esto y que tu c贸digo sea enorme
# Pues mira esto...

numbers_v1,2 = [element for element in range(1, 11)]
print(numbers_v1,2) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# Presentando los List Comprehension. Una sintaxis que permite escribir ciclos iterables
# EN UNA SOLA LINEA DE C脫DIGO

# Y tambien tiene un plus...

numbers_v2,1 = []
for i in range(1,11):
  if i % 2 == 0:
    numbers.append(i * 2)

print(numbers_v2,1) # Estamos multiplicando un n煤mero solo si su m贸dulo por 2 es igual a 0
# Esta es la manera tradicional...

numbers_v2,2 = [i*2 for i in range(1, 11) if i % 2 == 0] # Y esta es nuestra versi贸n
#                |   _________|_________   ______|______  
#                |            |            Y este es el plus...
#                |            |            la condici贸n
#Este es        _|            |           
# el elemento  |  Este es el ciclo de donde
# a iterar     |  sacamos el elemento

numeros = []
for elementos in range(1,11):
numeros.append(elementos)
print(elementos * 2)

numeros_V2 = [elementos for elementos in range(1,11)]
print(numeros_V2)

numeros2 = []
for i in range(1,11):
if i % 2 == 0:
numeros2.append(i*2)
print(numeros2)

numeros_v = [i*2 for i in range (1,11) if i%2 ==0]
print(numeros_v)

En esta estructura, expresi贸n es el valor que se agrega a la nueva lista y elemento representa cada elemento de la secuencia (como una lista, una cadena de texto, una tupla, etc.).

  • En cada iteraci贸n, la expresi贸n se eval煤a usando el valor actual del elemento y se agrega a la nueva lista.
  • Despu茅s de completar todas las iteraciones, la lista resultante se asigna a una variable.

Interesante el concepto de list comprehensions.

Acota mucho el codigo, sin embargo, cuando aplicamos el zen de python en algunas ocaciones siguiendo el criterio de que espaciado es mejor que denso, podriamos optar por el camino largo para que sea mas compresnsible para quien interpreta el codigo.

Aqu铆 un ejemplo de la compresi贸n de listas:

Esta funci贸n toma una lista de cosas y devuelve otra lista donde todo esta en may煤sculas.

Aqui les dejo dos ejemplos que encontr茅 sobre este tema: se trata de listas de varios niveles, o mejor dicho, listas que contienen listas:

  • Dos dimensiones
list_of_lists = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flattened_list = [num for row in list_of_lists for num in row ]
print(flattened_list)# [1, 2, 3, 4, 5, 6, 7, 8, 9]
  • Tres dimensiones
# Una lista con listas, que a su vez tiene m谩s listas.
# Lista de 3 niveles
list_of_lists = [ 
                    [ [1,2,3], [4,5,6], [7,8,9] ],
                    [ [2,4,6], [8,10,12], [14,16,18] ] 
                ]

new_list = [element for first_level in list_of_lists
            for second_level in first_level
            for element in second_level]

print(new_list)# [1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 6, 8, 10, 12, 14, 16, 18]

Ejemplo

number_v3 = [i for i in range(1, 500) if i % 3 == 0 and i % 5 == 0]

Resultado

[15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165, 180, 195, 210, 225, 240, 255, 270, 285, 300, 315, 330, 345, 360, 375, 390, 405, 420, 435, 450, 465, 480, 495]

Les recomiendo que practiquen !! no es tan dificil yo lo hice con pokemones lo pueden hacer con frutas o lo que sea solo es cogerle el tiro con ejemplos faciles

#mi forma de hacerlo con pokemones , por ejemplo necesito una lista de pokemones que comiencen por la letra A

computadora = ["Ratata", "pikachu","squirtle","charmander","bulbasor","gengar","onix",
              "jinx"]

pokemones = []

for name in computadora:
  if "a" in name.lower():
    pokemones.append(name)

print(pokemones)

#con list comprehension

pokemones2 =[name for name in computadora if "a" in name. lower()]
print(pokemones2)

Tambien se puede aplicar a strings:

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]

newlist = [x for x in fruits if 'a' in x]

print(newlist)

newlist = [expression for item in iterable if condition == True]

numbers =[]
for element in range(1,11):
if element %2 == 0:
numbers.append(element*2)
print(numbers)

numbers_v2 = [element*2 for element in range(1, 11) if element%2 == 0]
print(numbers_v2)

Les comparto la comparaci贸n que hice entre la sintaxis tradicional y la sintaxis comprimida, porque yo quer铆a asimilar muy bien la explicaci贸n de la estructura de esta 煤ltima (espero que no les de un mareo 馃槂):

Cada vez que se utilice range(a,b) el valor b no se imprime, en cambio se imprime b-1, ejemplo: usando range(1,16) entonces el ultimo valor que se imprime ser谩 15.

Ejercicios para practicar:
1: list comprehensi贸n de 20 n煤meros random
2: list comprehensi贸n de 20 n煤meros random pares

Soluci贸n
aleatorio = [random.randint(1, 100) for _ in range(21)]
print(aleatorio)

num_par_random = [
num for num in [random.randint(1, 100) for _ in range(1, 20)] if num % 2 == 0
]
print(num_par_random)

Hola! aqui les dejo mi codigo espero ayude

'''
List comprehensions
list = [element in element for iterable]
'''
jumpline = '='*25

numbers = []
for i in range(1,11):
  numbers.append(i)
print(numbers) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(jumpline)

#Todo el ciclo y la lista lo podemos hacer en una linea con list comprehension
numbers_list = [i for i in range(1,11)]
print(numbers_list) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print(jumpline)

# Quiero que el elemento sea * 2
numbers = []
for i in range(1,11):
  numbers.append(i * 2)
print(numbers) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
print(jumpline)

#Tambien puedo hacerlo con list comprehension
numbers_list = [i * 2 for i in range(1,11)]
print(numbers_list) # [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
print(jumpline)

# Ejemplo con condicional de list comrprehension, quiero numeros pares del 1 al 100
numbers = [i for i in range(1,101) if i % 2 == 0]
print(numbers)
print(jumpline)

# Ejemplo sin list comprehension
numbers = []
for i in range(1,101):
  if i % 2 == 0:
    numbers.append(i)
print(numbers)
print(jumpline)

Otro apunte que posiblemente sea f谩cil de entender sobre leer la l铆nea con If:

Ac谩 b谩sicamente le estoy pidiendo una lista de 100 items. Cada item, empezando con el uno, ser谩 multiplicado por dos. Luego se multiplicar谩 el dos y este se ubicar谩 en la posici贸n 1 de mi lista (el 0 lo ocup贸 el 1*2). Luego multiplicar谩 el tres y este ser谩 la nueva posici贸n dos. Pero esto suceder谩 siempre y cuando el residuo de la divisi贸n de ese n煤mero entre dos, es cero, es decir, que sea n煤mero par. En conclusi贸n me incluir谩 solo los n煤meros pares que surjan de la multiplicaci贸n de su posici贸n multiplicada por dos.

Una ventaja clara de List Comprehension: Lograr soluciones en el menor n煤mero de l铆neas de c贸digo posibles con una correcta legibilidad 馃挌

Excelente explicaci贸n,. me gusta

# Podemos usar listas por comprensi贸n para mapeos y filtros agradables
#add_10 es una funcion que les suma 10 a cada numero
[add_10(i) for i in [1, 2, 3]]  #=> [11, 12, 13]
[x for x in [3, 4, 5, 6, 7] if x > 5] #=> [6, 7]
# tambi茅n hay diccionarios
{k:k**2 for k in range(3)} #=> {0: 0, 1: 1, 2: 4}
# y conjuntos por comprensi贸n
{c for c in "la cadena"} #=> {'d', 'l', 'a', 'n', ' ', 'c', 'e'}

Como se leen las list comprehension

Sintaxis de una lista por compresi贸n

#Listas por comprension 

'''
Vamos a definir una lista, pero
de manera mas sencilla

Sintaxis:

[element for element in iterable]
Elemento    Ciclo donde se extraen elementos
            de cualquier iterable
'''

numeros=[]
for element in range(1,11): 
    numeros.append(element)
print(numeros)

numers_v2=[element for element in range(1,11)]
print(numers_v2)

# [element for element in iterafle if contiditon]
numeros_v3=[]
for i in range (1,11):
    if i%2==0:
        numeros_v3.append(i*2)
print(numeros_v3)

numeros_v4=[i*2 for i in range(1,11) if i%2==0]
print(numeros_v4)

Muy clara la explicaci贸n de comprehensions

Me qued贸 muy claro, que buena explicaci贸n

Para quienes nos acostumbramos a las explicaciones con Facundo Garcia, les dejo el enlace, en lo personal me parecio mas entendible con 茅l
https://platzi.com/clases/2255-python-intermedio/36463-list-comprehensions/

q cvr

Saludos, el ejercicio dea clase, los deberes los paso ya mismo.

numbers = []
for i in range(1, 9):
if i % 2 == 0:
numbers.append(i / 2)

print(numbers)

num2 = [i * 2 for i in range (1, 21) if i % 2 == 0]
print(num2)

Aqu铆 hay algunos ejercicios para reforzar este concepto => https://www.w3schools.com/python/python_lists_comprehension.asp

[expression for item in iterable]

Donde:

  • expression es la operaci贸n que se realiza con cada elemento de la lista.

  • item es una variable que toma cada valor del iterable (por ejemplo, una lista) durante cada iteraci贸n.

  • iterable es el objeto que se itera (por ejemplo, una lista).

Ejemplo

numeros = [1, 2, 3, 4, 5]
cuadrados = [x**2 for x in numbers]
print(cuadrados)  # Imprime [1, 4, 9, 16, 25]

Potente y c贸digo muy compacto, aunque al principio puede perderse legibilidad en el c贸digo. Hasta que nos acostumbramos a esta sintaxis. 馃殌馃挭

Aqui les comparto un ejemplo de List comprehension.

Un ejemplo de practica

mayores = [i for i in range(1,100) if i - 50 > 10]
print(mayores)

Lista de comprensi贸n

  • La comprensi贸n de listas ofrece una sintaxis m谩s corta cuando desea crear una nueva lista basada en los valores de una lista existente.

Ejemplo:

  • Basado en una lista de frutas, desea una nueva lista que contenga solo las frutas con la letra 鈥渁鈥 en el nombre.

  • Sin comprensi贸n de lista, tendr谩 que escribir una fordeclaraci贸n con una prueba condicional dentro:

Ejemplo

``
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = []

for x in fruits:
  if "a" in x:
    newlist.append(x)

print(newli
```st)
```

Operadoes ternarios en list comprehension

Hola, quiero dejar mi aporte diciendo que tambi茅n puedes usar operadores ternarios en un list comprehension.

  • Por qu茅 usarlo?
    Es una forma de simplificar al igual que un list comprehension, pero en este caso usas las sentencias if y else.

Sintaxis:

[element if conditional else element for element in iterable]

Ejemplo:

  • Supongamos que quieres crear una lista con los n煤meros del 1 al 10 y escribir si es par o impar.
par_impar = ['par' if i % 2 == 0 else 'impar' for i in range(1, 11)]

La salida sera

['impar', 'par', 'impar', 'par', 'impar', 'par', 'impar', 'par', 'impar', 'par']

Otro ejemplo:

lista = [5, 7, 11, 12, 15, 20, 24]
lista_nueva = [ elemento * 2 if elemento < 15 else elemento / 2 for elemento in lista ]

# Output

[10, 14, 22, 24, 7.5, 10.0, 12.0]
'''
numbers = []
for element in range(1, 11):
  numbers.append(element*2)

print(numbers)

numbers_v2 = [element *2 for element in range(1,11)]
print(numbers_v2)
'''
numbers = []
for i in range(1, 11):
  if i % 2 == 0:
    numbers.append(i*2)

print(numbers)

numbers_v2 = [i * 2 for i in range(1, 11) if i % 2 == 0]
print(numbers_v2)
numbers = []

def definir_multiplicando():
    a = int(input("Escriba un numero donde quiera que inicie"))
    b = int(input("Escriba un numero donde quiera que termine"))
    c = int(input("escriba un numero con el cual quiere multiplicar"))
    numbers = [element for element in range(a,b)]
    numbers2 = [element * c for element in range(a, b)]
    print("los numeros seleccionados fueron ("+str(a)+str(b)+") y el resultado es:")
    print(numbers)
    print("El numero para multiplicar fue : "+str(c)+" y su resultado es :")
    print(numbers2)

def condicion():
    d = int(input("Escriba 1 si quiere ver impares o 0 para pares "))
    numbers = [element for element in range(1, 15) if element%2==d]
    print(numbers)

if __name__ == "__main__":
    repetir=0
    while repetir==0:
        menu ="""
        1.definir rango
        2.poniendo condicion"""
        print(menu)
        opc= int(input("seleccione una opcion"))
        if opc==1:
            definir_multiplicando();
        if opc==2:
            condicion();
        else:
            print("opcion no valida")
            repetir=int(input("oprima 0 para volver al menu"))

Hay una gran profundidad en el tema de list comprehensions, de hecho se pueden hacer nested if o m谩s de un ciclo for.
aqu铆 un ejemplo de un nested if donde primero se valida la condicion i > 4 y luego que sea par.


numbers = [1,2,3,4,5,6,7,8,9,10]

iterate_numbers = [i for i in numbers if i > 4 if i % 2 == 0]

print(iterate_numbers)
 
#output [6, 8, 10]

Aqu铆 pueden revisar un art铆culo detallado en freecodecamp

""" list comprehension """

# clasic
numbers = []
for i in range(1,10):
  numbers.append(i)
print(numbers)

# list comprenhension
numbers_v2 = [i for i in range(1, 10)]
print(numbers_v2)

# examples
nombres = ["Dolores", "Elisabeth", "Giovanna", "Kukri", "Kyo", "Joseph", "Testament", "Mui Mui", "David", "Jake", "Pablo", "Lucy", "Juri", "Cammy", "Jun", "Asuka", "Gon", "Meruem", "Netero", "Yami", "Asta", "Neji", "Light", "Luong", "Mary", "Black", "Tsubaki", "Maka", "Gai", "Shingo"]

names_with_a = [i for i in nombres if "a" in i]
print(names_with_a)

names_with_e = [i for i in nombres if "e" in i]
print(names_with_e)

names_with_i = [i for i in nombres if "i" in i]
print(names_with_i)

names_with_o = [i for i in nombres if "o" in i]
print(names_with_o)

names_with_u = [i for i in nombres if "u" in i]
print(names_with_u)
#list comprehension

#manera larga
numbers = []
for i in range(1,11):
  numbers.append(i)

print(numbers)

#version corta y facil de leer
numbers_v2 = [i for i in range(1,11)]
print (numbers_v2)


#version con condicional
numbers_v3 = [i*2 for i in range(1,11) if i % 2 ==0]
print (numbers_v3)

que buena clase!

###List
numbers = []
for i in range(1, 11):
if i % 2 == 0:
numbers.append(i * 2)

print(numbers)

###List comprehension
c=[element for element in range(1,11)]
print漏
###Paso 1
###primero debe ir lo que esta adentro de nuestro append, luego el for 鈥淣ombre o letra para que sea nuestro elemento鈥
##Paso 2
##gregarle el in range que sera el rango o cantidad de numeros que queremos ver
##Paso 3
###Todo esto debe estar dentro de nuestro parentesis rectangulares

##Ejemplo

Esto es un list

numbers = []
for element in range(1, 11):
if element * 2 >= 4:
numbers.append(element * 2)

print(numbers)

##Esto es un list comprehension con condicional
numeros=[element*2 for element in range(1,11) if element *2 >=4]
print(numeros)

###Paso 1
###primero debe ir lo que esta adentro de nuestro append, luego el for 鈥淣ombre o letra para que sea nuestro elemento鈥
##Paso 2
##gregarle el in range que sera el rango o cantidad de numeros que queremos ver
##Paso 3
###Agregar la condicional if "nombre o letra de nuestro elemento "+ "cualquier operador +,-,*,/ o >=,<= " y cualquier numero

Todo esto debe estar dentro de nuestro parentesis rectangulares

Ejemplo con colores.

colores = ["amarillo", "azul", "rojo", "verde", "purpura", "naranja", "cafe"]
print(colores)

colores_u = []
for x in colores:
  if "u" in x:
    colores_u.append(x)

print(colores_u)

colores_u = [x for x in colores if "u" in x]
print(colores_u)

Resultado:
~/Python-202$ python lists_comprehensions.py
[鈥榓marillo鈥, 鈥榓zul鈥, 鈥榬ojo鈥, 鈥榲erde鈥, 鈥榩urpura鈥, 鈥榥aranja鈥, 鈥榗afe鈥橾
[鈥榓zul鈥, 鈥榩urpura鈥橾
[鈥榓zul鈥, 鈥榩urpura鈥橾

Recomiendo leer el libro Robust Python (que aun no termino) que permite escribir c贸digo mas robusto y con buenas practicas, una de ellas es utilizar un ciclo for cuando necesitamos recorrer un iterable sin modificar su valor, mientras que recomienda los comprenhensions cuando vamos a realizar transformaciones sobre el iterable. Algo interesante sin embargo es que son mas rapidos para recorrer ese iterable que un ciclo for convencional.

Ejercicio

Obtener la lista de vocales presentes en una frase:

sentence_str = "This is a new Python course"
vowels_list = [i for i in sentence_str if i in 'aeiou']
print(vowels_list)

List Comprehension

#------------- List Comprehension-------------------

numbers = []

# iteracion normal sobre una lista
for element in range(1,11):
  numbers.append(element)

print(numbers)
--> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# reducimos las lineas de codigo utilizadas con list comprehension
numbers_2 = [element for element in range(1, 11)]
print(numbers_2)
--> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# multiplicar por 2 los elementos que forman la lista
numbers_2 = [element * 2 for element in range(1,11)]
print(numbers_2)
--> [2, 4, 6, 8, 10, 12, 14, 16, 18, 20]

# Ejemplo con condicional en una Iteracion normal
numbers_par = []

for i in range(1,11):
  if i % 2 == 0:
    numbers_par.append(i*2)

print(numbers_par)
--> [4, 8, 12, 16, 20]

# Ejemplo con condicional en una List comprehension
numbers_par = [i * 2 for i in range(1,11) if i % 2 == 0]
print(numbers_par)
--> [4, 8, 12, 16, 20]

Ejemplo de List Comprehension

Lectura del Ejemplo: Multiplicamos por 2 un elemento que obtenemos de un iterable, que en este caso es un rango que va de 1 a 101, y se agrega a la lista solo si su reciduo de la division por 2 es igual a 0, es decir, que sea un numero par

I miss you Facundo!

Estan muy geniales los List Comprenhensions!

'''
num = []
for element in range(1,11):
  num.append(element * 2)

print(num)

num_2 = [element *2 for element in range(1,11)]
print(num_2)
'''
num = []
for i in range(1,11):
  if i % 2 == 0:
    num.append(i * 2)

print(num)

num_2 = [i*2 for i in range(1,11) if i % 2 == 0]
print(num_2)

List comprehension

Mis notas de la clase:

numbers = []
for element in range(1,11):
  numbers.append(element)
print(numbers)

# List comprehension
numbers_v2 = [element for element in range(1,11)]
print(numbers_v2)

numbers_v3 = [element * 2 for element in range(1,11)]
print(numbers_v3) #Lista de los numeros multiplicado por 2


### Solo agregar los pares y multiplicar por dos

# Version for
numbers = []
for i in range(1,11):
  if i % 2 == 0:
    numbers.append(i * 2)
    
print(numbers)

# Version list comprehension
numbers_v2 = [i *2 for i in range(1,11) if i % 2 == 0]
print(numbers_v2)

Comparto mi aporte con los meses del a帽o:

meses = ["enero", "febrero", "marzo", "abril", "mayo", "junio", "julio", "agosto", "septiembre", "octubre", "noviembre", "diciembre"]
print(meses)
mes_o = [element for element in meses if "o" in element]
print(mes_o)

Obtenemos:

['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']
['enero', 'febrero', 'marzo', 'abril', 'mayo', 'junio', 'julio', 'agosto', 'septiembre', 'octubre', 'noviembre', 'diciembre']
['enero', 'febrero', 'marzo', 'mayo', 'junio', 'julio', 'agosto', 'octubre', 'noviembre']