Python – List Comprehension

Uso Geral

Gerar um iterável baseado em um outro iterável. No meio deste caminho é possível fazer um processamento de dados.

Exemplos

Básico

In [1]: numeros = [1,2,3,4,5]                         
In [2]: novos_numeros = [numero for numero in numeros]
In [3]: novos_numeros                                 
Out[3]: [1, 2, 3, 4, 5]

Funciona assim: o numero é uma variável e o valor da iteração (for numero in numeros) é colocado nesta variável.

Utilizando Operações

Podemos realizar operações com os valores iterados:

In [1]: numeros = [10,20,30,40,50]            
In [2]: novos_numeros = [numero/2 for numero in numeros]         
In [3]: novos_numeros                                             
Out[3]: [5.0, 10.0, 15.0, 20.0, 25.0]

Utilizando Condicionais (filtrando)

In [1]: numeros = [1,2,3,4,5,6,7,8,9,10]
In [2]: novos_numeros = [numero for numero in numeros if numero>5]
In [3]: novos_numeros
Out[3]: [6, 7, 8, 9, 10]

O if também pode ficar no começo, exemplo:

In [16]: lista_teste = ["Gato", "Cachorro", "Papagaio"]
In [17]: [teste if teste == "Cachorro" else "Sumiu" for teste in lista_teste]
Out[17]: ['Sumiu', 'Cachorro', 'Sumiu']

Quando usamos o if no fim da list comprehension, funciona como um filtro. Quando utilizamos no começo, funciona como um operador ternário[ternario].

Utilizando um for aninhado

In [18]: for x in range(10):
    ...:     for y in range(5):
    ...:         print(x,y)
    ...: 

Resultado:

0 0
0 1
0 2
0 3
0 4
1 0
1 1
[...]
8 4
9 0
9 1
9 2
9 3
9 4

Fazendo com list comprehension:

In [19]: linhas_e_colunas = [(x,y) for x in range(10) for y in range(5)]

Resultado:

[(0, 0),
 (0, 1),
 (0, 2),
 (0, 3),
 (0, 4),
 (1, 0),
 (1, 1),
[...]
 (9, 1),
 (9, 2),
 (9, 3),
 (9, 4)]