Permite simplificar el código, habitualmente reducen varias líneas a una sola.
Veamos primero un bucle for
que ocupa varias líneas como se reduce luego a una sola.
lista=[]
for i in "Playa":
lista.append(i)
print(lista)
['P', 'l', 'a', 'y', 'a']
[letra for letra in "Playa"]
['P', 'l', 'a', 'y', 'a']
lista=['Berlín', 'París', 'Roma', 'Londres']
print([i for i in lista]) #List Comprehension: permiten crear listas de forma concisa
['Berlín', 'París', 'Roma', 'Londres']
lista=['Berlín','París','Roma','Londres']
[print(i) for i in lista] #Haciéndolo iterable
Berlín París Roma Londres
[None, None, None, None]
Si ejecutamos las líneas de código previas desde una terminal llamando a un fichero .py no se verá el Out:
[None, None, None, None]
Veamos primero lo que ocupa un bucle for
con un if
y como se reduce luego a una sola línea.
lista=[]
for i in range(20):
if not(i%2):
lista.append(i)
print(lista)
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
[x for x in range(20) if x%2==0]
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
ciudades = ['Berlín', 'París', 'Roma', 'Londres']
[ciudad for ciudad in ciudades if 'a' in ciudad] # Obtenemos solo las ciudades que contengan una 'a'
['París', 'Roma']
Veamos primero lo que ocupa un bucle for
con dos if
y como se reduce luego a una sola línea.
lista=[]
for i in range(100):
if not(i % 2):
if not(i % 5):
lista.append(i)
print(lista)
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
[i for i in range(100) if i % 2 == 0 if i % 5 == 0]
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
else
¶print(["Par" if i % 2 == 0 else "Impar" for i in range(1,11)]) #Condicional con else
['Impar', 'Par', 'Impar', 'Par', 'Impar', 'Par', 'Impar', 'Par', 'Impar', 'Par']
print([(i,"Par") if i % 2 == 0 else "Impar" for i in range(1,11)]) #Condicional con else
['Impar', (2, 'Par'), 'Impar', (4, 'Par'), 'Impar', (6, 'Par'), 'Impar', (8, 'Par'), 'Impar', (10, 'Par')]
transpuesta = []
matriz = [[1, 2, 3, 4], ['a', 'b', 'c', 'd']]
for i in range(len(matriz[0])):
transpuesta_fila= []
for row in matriz:
transpuesta_fila.append(row[i])
transpuesta.append(transpuesta_fila)
m = transpuesta
m
[[1, 'a'], [2, 'b'], [3, 'c'], [4, 'd']]
[[row[i] for row in m] for i in range(len(m[0]))]
[[1, 2, 3, 4], ['a', 'b', 'c', 'd']]
[palabra.title() for palabra in ['londres', 'paris', 'madrid']]
['Londres', 'Paris', 'Madrid']
[num**2 for num in range(11)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[(num, num*2, num**2) for num in range(11)]
[(0, 0, 0), (1, 2, 1), (2, 4, 4), (3, 6, 9), (4, 8, 16), (5, 10, 25), (6, 12, 36), (7, 14, 49), (8, 16, 64), (9, 18, 81), (10, 20, 100)]
Ejercicio
Crear un diccionario donde la clave sean los números pares del 0 al 10 y el valor sean sus cuadrados.
Listar los archivos del directorio img que comienzan por t y finalizan por .png
Primero clonamos el repositorio.
!git clone https://github.com/financieras/pyCourse.git
Cloning into 'pyCourse'... remote: Enumerating objects: 5797, done. remote: Counting objects: 100% (391/391), done. remote: Compressing objects: 100% (138/138), done. remote: Total 5797 (delta 304), reused 310 (delta 253), pack-reused 5406 Receiving objects: 100% (5797/5797), 4.78 MiB | 9.35 MiB/s, done. Resolving deltas: 100% (4326/4326), done.
Vemos en qué directorio estamos.
!pwd
/content
import os
ficheros = [f for f in os.listdir('./pyCourse/jupyter/img') if f.endswith('.png') and f.startswith('t')]
print(ficheros)
['tablanotas.png', 'taza.png', 'tablaverdad.png']
for
¶cartas = ['sota', 'caballo', 'rey']
palos = ['oros', 'copas', 'espadas', 'bastos']
frases = ['{} de {}'.format(carta.title(), palo.title()) for carta in cartas for palo in palos]
print(frases)
['Sota de Oros', 'Sota de Copas', 'Sota de Espadas', 'Sota de Bastos', 'Caballo de Oros', 'Caballo de Copas', 'Caballo de Espadas', 'Caballo de Bastos', 'Rey de Oros', 'Rey de Copas', 'Rey de Espadas', 'Rey de Bastos']