1. List comprehensions

Esquema Markmap resumen.

Una de las principales ventajas de Python es que una misma funcionalidad puede ser escrita de maneras muy diferentes, ya que su sintaxis es muy rica en lo que se conoce como expresiones idiomáticas o idiomatic expressions. Las list comprehension o comprensión de listas son una de ellas.

Las list comprehension nos permiten crear listas de elementos en una sola línea de código.

Sintaxis básica:

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

Veamos un ejemplo, queremos crear una nueva lista partiendo de otra lista pero sólo queremos incluir en la nueva lista aquellos elementos de la lista original que cumplan una determinada condición, por ejemplo dada una lista de cadenas sólo queremos añadir a la nueva lista aquellos elementos de la lista original que contengan la letra “a”.

Hasta ahora hubiésemos hecho algo parecido a esto:

src/01.py

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

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

print(newlist) # ['apple', 'banana', 'mango']

Usando las list comprehension podemos reducir el número de líneas de código y hacer algo equivalente:

fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [fruit for fruit in fruits if "a" in fruit]
print(newlist) # ['apple', 'banana', 'mango']

Podemos aplicar cualquier otro tipo de condición sobre los elementos recorridos de cualquier objeto iterable:

newlist = [fruit for fruit in fruits if fruit != "apple"]
print(newlist) # ['banana', 'cherry', 'kiwi', 'mango']

La mínima expresión de una list comprehension que genera una nueva lista con los mismos elementos que la lista original:

newlist = [x for x in fruits] 
print(newlist) # ['apple', 'banana', 'cherry', 'kiwi', 'mango']

Podemos usar cualquier objeto iterable:

newlist = [x for x in range(10)]
print(newlist) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
newlist = [x for x in range(10) if x < 5] 
print(newlist) # [0, 1, 2, 3, 4
newlist = ['hello' for x in fruits] 
print(newlist) # ['hello', 'hello', 'hello', 'hello', 'hello']

3. Enlaces externos