Resumo: neste tutorial, você aprenderá sobre as compreensões de lista do Python que permitem criar uma nova lista a partir de uma existente.
Introdução às compreensões de lista do Python
Na programação, muitas vezes você precisa transformar elementos de uma lista e retornar uma nova lista.
Por exemplo, suponha que você tenha uma lista de cinco números como esta:
numbers = [1, 2, 3, 4, 5]
E você deseja obter uma lista de quadrados com base nesta lista numbers
.
A maneira direta é usar um loop for:
numbers = [1, 2, 3, 4, 5]
squares = []
for number in numbers:
squares.append(number**2)
print(squares)
Neste exemplo, o loop for
itera sobre os elementos da lista numbers
, eleva cada número ao quadrado e adiciona o resultado à lista de quadrados.
Observe que um número ao quadrado é o produto do número multiplicado por ele mesmo. Por exemplo, o número quadrado 2 é 2*2 = 4, o número quadrado 3 é 3*3 = 9 e assim por diante.
Para tornar o código mais conciso, você pode usar a função interna map()
com uma expressão lambda:
numbers = [1, 2, 3, 4, 5]
squares = list(map(lambda number: number**2, numbers))
print(squares)
Como a função map()
retorna um iterador, você precisa usar a função list()
para converter o iterador em uma lista.
Tanto o loop for
quanto a função map()
podem ajudá-lo a criar uma nova lista com base em uma existente. Mas o código não é realmente conciso e bonito.
Para ajudá-lo a criar uma lista com base na transformação de elementos de uma lista existente, o Python fornece um recurso chamado compreensão de lista.
Veja a seguir como usar a compreensão de lista para criar uma lista de quadrados a partir da lista numbers
:
numbers = [1, 2, 3, 4, 5]
squares = [number**2 for number in numbers]
print(squares)
E aqui está a parte de compreensão da lista:
squares = [number**2 for number in numbers]
Uma compreensão de lista consiste nas seguintes partes:
- Uma lista de entrada (
numbers
) - Uma variável que representa os elementos da lista (
number
) - Uma expressão de saída (
number**2
) que retorna os elementos da lista de saída dos elementos da lista de entrada.
O seguinte mostra a sintaxe básica da compreensão da lista do Python:
[output_expression for element in list]
É equivalente ao seguinte:
output_list = []
for element in list:
output_list.append(output_expression)
Compreensão de lista python com condição if
O seguinte mostra uma lista das cinco principais montanhas mais altas da Terra:
mountains = [
['Makalu', 8485],
['Lhotse', 8516],
['Kanchendzonga', 8586],
['K2', 8611],
['Everest', 8848]
]
Para obter uma lista de montanhas com altura superior a 8.600 metros, você pode usar um loop for
ou a função filter()
com uma expressão lambda como esta:
mountains = [
['Makalu', 8485],
['Lhotse', 8516],
['Kanchendzonga', 8586],
['K2', 8611],
['Everest', 8848]
]
highest_mountains = list(filter(lambda m: m[1] > 8600, mountains))
print(highest_mountains)
Saída:
[['K2', 8611], ['Everest', 8848]]
Como a função map()
, a função filter()
retorna um iterador. Portanto, você precisa usar a função list()
para converter o iterador em uma lista.
As compreensões de lista do Python fornecem um predicado opcional que permite especificar uma condição para os elementos da lista a serem incluídos na nova lista:
[output_expression for element in list if condition]
Essa compreensão de lista permite que você substitua filter()
por uma expressão lambda:
mountains = [
['Makalu', 8485],
['Lhotse', 8516],
['Kanchendzonga', 8586],
['K2', 8611],
['Everest', 8848]
]
highest_mountains = [m for m in mountains if m[1] > 8600]
print(highest_mountains)
Saída:
[['K2', 8611], ['Everest', 8848]]
Resumo
- As compreensões de lista do Python permitem que você crie uma nova lista a partir de uma existente.
- Use compreensões de lista em vez de
map()
oufilter()
para tornar seu código mais conciso e legível.