A compreensão de lista em Python é uma sintaxe fácil e compacta para criar uma lista a partir de uma string ou outra lista. É uma maneira muito concisa de criar uma nova lista executando uma operação em cada item da lista existente. A compreensão da lista é consideravelmente mais rápida do que o processamento de uma lista usando o loop for.


É assim que as compreensões de lista são usadas.


# As compreensões de lista permitem que você defina

# listas da mesma forma que Matemáticos fazem!

 

# Você pode fazer isso com matemática

lista_exponente = [x ** 2 for x in range(10)]

 

# Ou usando condicionais para filtrar resultados!

# Aqui filtra só se os expoentes forem divisíveis por 2

lista_filtrada = [x for x in lista_exponente if x % 2 == 0]

 

# Ou faça testes bool sucessivos!

lista_bool = [(x % 2 == 0) for x in lista_exponente]

 

 

print(lista_exponente)

print(lista_filtrada)

print(lista_bool)


Saída —--------------------

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

[0, 4, 16, 36, 64]

[True, False, True, False, True, False, True, False, True, False]


Basicamente, eles são muito úteis e super elegantes.

Aqui está uma das compreensões de lista mais complicadas!


# Este usa duas compreensões de lista juntas

sem_primos = [j for i in range(2, 8) for j in range(i*2, 50, i)]

primos = [x for x in range(2, 50) if x not in sem_primos]

 

print(primos)


Saída —--------------------

[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]


Você também pode usá-lo com não números!


 

palavras = 'A rápida raposa marrom pula sobre o cachorro preguiçoso'.split()

 

coisas = [[p.upper(), p.lower(), len(p)] for p in palavras]

for i in coisas:

     print(i)

 


Saída —--------------------

['A', 'a', 1]

['RÁPIDA', 'rápida', 6]

['RAPOSA', 'raposa', 6]

['MARROM', 'marrom', 6]

['PULA', 'pula', 4]

['SOBRE', 'sobre', 5]

['O', 'o', 1]

['CACHORRO', 'cachorro', 8]

['PREGUIÇOSO', 'preguiçoso', 10]



Claro, você pode usar funções lambda para obter o mesmo resultado, mas é menos compreensível.


 

palavras = 'A rápida raposa marrom pula sobre o cachorro preguiçoso'.split()

 

# Claro, você pode usar funções lambda para obter o mesmo resultado

# Mas é menos compreensível

coisas = map(lambda p: [p.upper(), p.lower(), len(p)], palavras)

 

for i in coisas:

     print(i)

 


Saída —--------------------

['A', 'a', 1]

['RÁPIDA', 'rápida', 6]

['RAPOSA', 'raposa', 6]

['MARROM', 'marrom', 6]

['PULA', 'pula', 4]

['SOBRE', 'sobre', 5]

['O', 'o', 1]

['CACHORRO', 'cachorro', 8]

['PREGUIÇOSO', 'preguiçoso', 10]