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)]