# Hemos visto en muchos ejercicios que recorrer y procesar una lista es habitual # En python tenemos la comprension de listas # [expresión for elemento in iterable] cuadrados = [x ** 2 for x in range(1, 10)] print(cuadrados) # Hace exactamente lo mismo que esto cuadrados = [] for x in range(1, 10): cuadrados.append(x ** 2) letrasdobles = [letra * 2 for letra in "hola que tal"] print(letrasdobles) notas = [4, 15, 7, 19, 12] notas10 = [nota / 2 for nota in notas] print(notas10) notascopia = [nota for nota in notas] print(notascopia) # tabla de multiplicar del 7 (7,14,21,...,70) tabla7 = [x * 7 for x in range(1, 11)] print(tabla7) # Añadir una condición: seleccionar lo elementos del iterable que cumplan una determinada condición # [expresion for elementi in interable if condicion] # Buscamos los que sean pares (x%2==0) pares = [x for x in range(1, 11) if x % 2 == 0] print(pares) # Las cadenas de una determinada longitud cadenas = ["a", "bb", "ccc", "dddd", "eeeeee", "fffffff"] largas = [cadena for cadena in cadenas if len(cadena) > 4] print(largas) # Buscamos las notas aprobadas (>10) y además las transformamos notas10aprobadas = [nota / 2 for nota in notas if nota >= 10] print(notas10aprobadas) # Operador ternario: Igual que un if pero en vez de controlar el flujo # devuelve un valor dependiendo de la condicion # valor_si_cierto if condicion else valor_si_falso numero = 27 espar = "par" if numero % 2 == 0 else "impar" print(espar) if numero % 2 == 0: espar = "par" else: espar = "impar" ciudad = "Logroño" envio = 5 if ciudad == "Barcelona" else 10 print(envio) # 10 def calculoEnvio(ciudad): return 5 if ciudad == "Barcelona" else 10 print(calculoEnvio("Barcelona")) # 5 # Podemos usar como expresión un operador ternario notasCorte = ["Aprobada" if nota >= 10 else "Suspendida" for nota in notas] print(notasCorte) longitudes = ["corta" if len(cadena) < 4 else "larga" for cadena in cadenas] print(longitudes) # Todo junto numeros = [1, 4, -5, 7, -2, 20] # A los números positivos si es par lo duplicamos y si es impar lo elevamos al cuadrado calculo = [numero * 2 if numero % 2 == 0 else numero ** 2 for numero in numeros if numero >= 0] print(calculo) # nucleo que es recorer una lista # for elemento in iterable: for numero in numeros # Parte derecha yo puedo poner una condición: ejemplo if numero>=0 (los positivos) [1,4,7,20] # parte izquierda pongo una expresión puede ser numero en cuyo caso no hacemos ninguna transformación calculo = [numero for numero in numeros if numero >= 0] print(calculo) # Una expresión sencilla, por ejemplo, elevar al cubo calculo = [numero ** 3 for numero in numeros if numero >= 0] print(calculo) # Liarme la manta a la cabeza y usar un operador ternario, en este caso # si es par duplicamos, si es impar elevamos al cubo # en el operador ternario hacemos lo mismo, empezamos por el núcleo, la condición # if numero%2==0 # en la parte derecha ponemos lo que devolvemos si NO se cumple la condición numero**2 # en la parte izquierda ponemos lo que devolvemos si SÍ se cumple numero*2 # numero * 2 if numero % 2 == 0 else numero ** 2 # Juntando todo obtengo lo siguiente: calculo = [numero * 2 if numero % 2 == 0 else numero ** 2 for numero in numeros if numero >= 0] print(calculo) frases = ["hola", "que tal", "epanadiplosis", "Bu", "En un lugar de la mancha", "otorrinolaringologo"] # Vamos a hacer un código que filtre las palabras con una longitud mayor de 4 # Si tienen un espacio dejamos la cadena, si no tienen ningún espacio ponemos "No es frase" # yo empiezo por el núcleo que siempre es recorrer la lista filtro = [frase for frase in frases] # puesto que ni filtro ni pongo expresión lo siguiente me devuelve la propia lista print(filtro) # ["hola", "que tal", "epanadiplosis", "Bu", "En un lugar de la mancha", "otorrinolaringologo"] # Aplico la condición, la longitud debe ser mayor de 4 filtro = [frase for frase in frases if len(frase) > 4] print(filtro) # ["que tal", "epanadiplosis", "En un lugar de la mancha", "otorrinolaringologo"] # Ahora tengo que construir el operador ternario que, si tiene un espacio me devuelve la frase # Y si no lo tiene me devuelve "No hay frase2 # Empiezo por el núcleo # if " " in frase # Si se cumple: devuelvo frase # Si no se cumple: devuelvo "No es frase" # frase if " " in frase else "No es frase" # Meto el operador ternario en lo que tenía antes filtro = [frase if " " in frase else "No es frase" for frase in frases if len(frase) > 4] print(filtro) # ['que tal', 'No es frase', 'En un lugar de la mancha', 'No es frase']