HOWTO · Python

Como aplicar uma função a uma lista em Python

Existem 4 métodos principais para aplicar uma função a uma lista em Python: o loop for, a função map(), a compreensão de lista e a expressão geradora.

Nesta página

Para aplicar uma função a cada item de uma lista em Python, chame-a para cada item e colete os valores retornados. Por exemplo, multiplicar cada número por 10 transforma [1, 2, 3, 4] em [10, 20, 30, 40]. Você pode usar um loop for, map(), uma compreensão de lista ou uma expressão geradora. Os exemplos abaixo usam a mesma função e a mesma entrada, para que você possa comparar como cada abordagem produz ou fornece os resultados.

Usar o loop for para aplicar uma função a uma lista em Python

Um loop for torna cada passo explícito: crie uma lista de resultados, chame a função para cada entrada e adicione cada valor retornado. Isso é útil quando o loop precisa de instruções adicionais ou de ramificações. O exemplo a seguir aplica a função a cada número e imprime a lista resultante.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = []

for number in numbers:
    results.append(multiply_by_ten(number))

print(results)

O loop deixa numbers inalterada e constrói results como uma lista separada. Altere o corpo da função para executar a transformação de que os seus próprios dados precisam.

Usar a função map() para aplicar uma função a uma lista em Python

A função map() do Python recebe um chamável e um iterável e, em seguida, produz o resultado do chamável para cada item. No Python 3, map() retorna um iterador; envolva-o em list() quando o restante do código precisar de uma lista.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = list(map(multiply_by_ten, numbers))
print(results)

Essa forma é concisa quando você já tem uma função para aplicar. O iterador é consumido à medida que list() solicita seus valores; se precisar percorrer os valores novamente, mantenha a lista resultante ou crie outro iterador.

Usar uma compreensão de lista para aplicar uma função a uma lista em Python

Uma compreensão de lista constrói uma nova lista colocando a expressão de cada item antes da cláusula for. É uma construção da linguagem Python, não um método, e é uma escolha compacta quando a transformação cabe claramente em uma linha.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = [multiply_by_ten(number) for number in numbers]
print(results)

A expressão multiply_by_ten(number) determina cada resultado, enquanto a cláusula for fornece cada item de entrada. Uma compreensão também pode incluir uma condição quando apenas itens selecionados devem ser incluídos.

Usar uma expressão geradora para aplicar uma função a uma lista em Python

Uma expressão geradora usa parênteses ao redor de uma expressão em estilo de compreensão. Ela produz valores de forma preguiçosa, à medida que são solicitados, em vez de construir uma lista de resultados imediatamente. Isso pode evitar manter todos os valores transformados de uma só vez, embora converter o gerador em uma lista os materialize.

def multiply_by_ten(number):
    return 10 * number


numbers = [1, 2, 3, 4]
results = (multiply_by_ten(number) for number in numbers)
print(list(results))

Cada valor é produzido durante a iteração. Um gerador é consumido à medida que é percorrido, portanto, uma segunda passagem pelo mesmo gerador não repete os valores; crie um novo gerador ou armazene os valores em uma lista se precisar reutilizá-los.

Conclusão

Escolha um loop for quando quiser controle explícito sobre cada passo e use map() quando aplicar uma função existente a um iterável for a opção natural. Uma compreensão de lista cria diretamente uma nova lista com sintaxe concisa. Use uma expressão geradora quando quiser iteração preguiçosa e não precisar materializar todos os resultados de uma vez. Todas as quatro abordagens podem chamar funções integradas, além das funções que você define; por exemplo, uma compreensão pode aplicar str a cada item com [str(item) for item in numbers].