Função Python map(), explicada com exemplos

Neste tutorial, você aprenderá como usar a função map() do Python para aplicar uma função em todos os itens de um iterável.

Python suporta o paradigma de programação funcional que permite definir tarefas como computação de funções programaticamente. Você pode tratar funções Python como objetos: uma função pode receber outra função como parâmetro e retornar outra função.

A função map() recebe uma função como argumento e permite aplicá-la a todos os itens em uma sequência.

Ao final deste tutorial, você poderá usar a função map() do Python — para reescrever loops detalhados e compreensões de lista. Você codificará vários exemplos para entender as diferentes maneiras de usar a função map().

Como aplicar uma função a elementos de uma lista Python

Vamos começar nossa discussão com um exemplo.👩‍🏫

Aqui nums é uma lista de números.

nums = [2,4,3,7]

Em seguida, considere a função self_pow(). A função self_pow() recebe um número como argumento e retorna o número elevado à potência do próprio número: n**n.

Em Python, ** é o operador de exponenciação. a**b retorna o valor de a elevado à potência b, ab.

def self_pow(n):
  return n**n

TO-DO: Para criar uma nova lista nums_pow aplicando a função self_pow() a cada elemento na lista nums.

Usando para Loop

Para fazer isso, você pode usar loops for em Python:

  • Para cada número na lista nums, chame a função self_pow() com num como argumento.
  • Anexe o resultado da chamada de função à nova lista nums_pow.
nums_pow = []

for num in nums:
  nums_pow.append(self_pow(num))

print(nums_pow)

Na saída, cada número nums é elevado a si mesmo. Os elementos na lista nums_pow são os seguintes: 22, 44, 33,77.

Output
[4, 256, 27, 823543]

Usando Compreensão de Lista

Você pode tornar isso conciso usando compreensão de lista. A partir do loop for explícito acima, podemos identificar a expressão de saída e a lista para percorrer.

Podemos então modificar a expressão genérica de compreensão de lista:

new_list = [<output expression> for item in iterable]

A expressão de compreensão de lista para gerar a lista nums_pow é a seguinte:

nums_pow = [self_pow(num) for num in nums]
print(nums_pow)

A saída é a mesma do uso de loops for, conforme esperado.

Output
[4, 256, 27, 823543]

Em vez de compreensão de loop e lista, você pode usar a função map() do Python com uma sintaxe concisa e ajuda a aplicar a função a todos os itens em um iterável. Vamos começar aprendendo a sintaxe da função map.

  As 8 principais ferramentas para monitorar alterações no site

Sintaxe da função Python map()

A sintaxe geral para usar a função map() do Python é a seguinte:

map(function, iterable_1,[iterable_2,...,iterable_n])

A função map() recebe pelo menos dois argumentos, uma função e um iterável.

Na sintaxe acima:

  • function denota uma função Python ou, em geral, qualquer Python callable. Isso inclui funções definidas pelo usuário e incorporadas, classes, métodos de instância e classe e muito mais.
  • iterable é qualquer iterável Python válido, como uma lista, tupla e string.
  • A função map() se aplica e a função é usada para cada elemento no iterável.

O que a função map() retorna?

Ele retorna um objeto de mapa. Você pode então converter o objeto de mapa em uma lista usando a sintaxe: list(map(function,iterable)).

Dependendo do caso de uso, você pode convertê-lo em uma tupla do Python.

Agora que você aprendeu a sintaxe da função map() do Python, vamos começar a codificar exemplos.

Você deve ter o Python 3.x para acompanhar este tutorial. Caso contrário, você pode executar os trechos de código no editor Python online etechpt.com.

Como usar a função map() com funções definidas pelo usuário

#1. Anteriormente, aplicamos a função self_pow() a cada número na lista nums. Na sintaxe da função map(), podemos passar a função self_pow e os números da lista como argumentos.

Nota: Você deve especificar apenas o nome da função e não uma chamada de função. Use self_pow e não self_pow().

A função map() retorna um objeto de mapa.

print(map(self_pow,nums))

<map object at 0x7f7d315c14d0>

Podemos então converter o objeto map em uma lista usando a função list(), conforme mostrado abaixo.

nums_pow = list(map(self_pow,nums))
print(nums_pow)

Aqui está a saída onde cada num em nums é mapeado para numnum na lista nums_pow.

Output
[4, 256, 27, 823543]

#2. Considere a seguinte função inch_to_cm() que converte polegadas em centímetros. 1 polegada = 2,54 cm.

def inch_to_cm(inch):
  return inch*2.54

Para converter os valores de polegadas na lista de polegadas em centímetros, você pode usar a função map() conforme mostrado na célula de código abaixo.

inches = [5.54,3.4,1,25,8.2]
cms = list(map(inch_to_cm,inches))
print(cms)

A lista cms contém os valores em polegadas expressos em centímetros.

Output
[14.0716, 8.636, 2.54, 63.5, 20.828]

Como usar a função map() com funções internas

Nesta seção, aprenderemos como usar map() com funções integradas em Python.

#1. As strings de lista são uma lista de linguagens de programação. Você gostaria de criar uma nova lista strings_upper que contém as strings da linguagem de programação em letras maiúsculas.

strings = ['JavaScript','Rust','Python','Go']

O método de string integrado .upper() atua em uma string e retorna uma cópia formatada em maiúsculas.

strings_upper = list(map(str.upper,strings)) 
print(strings_upper)

A lista strings_upper inclui strings nas strings da lista formatadas em maiúsculas.

Output
['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2. A função len() embutida em Python recebe uma sequência como argumento e retorna seu comprimento. Para encontrar o comprimento de cada uma das strings na lista de strings, podemos usar a função map() e aplicar a função length em cada string, conforme mostrado abaixo.

strings_len = list(map(len,strings))
print(strings_len)
Output
[10, 4, 6, 2]

#3. Você pode usar a função map() com outras coleções, como tuplas.

  Como inverter os botões do mouse para uso canhoto

O exemplo a seguir contém uma tupla contendo informações sobre o número de quartos, área e cidade em que uma casa está localizada.

Em Python, a função type() retorna o tipo de dados de qualquer objeto Python. Para obter o tipo de dados de todos os itens nesta tupla, você pode usar a função map() para chamar a função de tipo em cada item da tupla.

house = (2,758.5,'Bangalore')
house_elt_type = tuple(map(type,house))
print(house_elt_type)

Nós convertemos o objeto map em uma tupla. Você também pode converter em uma lista ou em qualquer outra coleção.

Na saída abaixo, vemos que os tipos de dados de 2, 758.5 ​​e Bangalore foram inferidos como ‘int’, ‘float’ e ‘str’, respectivamente.

Output
(<class 'int'>, <class 'float'>, <class 'str'>)

#4. Em Python, você pode importar módulos internos e usar as funções definidas nos módulos.

Para calcular a raiz quadrada de cada número na lista nums, você pode usar a função raiz quadrada sqrt do módulo math.

import math
nums = [30,90,34,45,97]
nums_sqrt = list(map(math.sqrt,nums))
print(nums_sqrt)
Output
[5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]

A saída acima é difícil de analisar e seguir. Você pode arredondar cada valor de raiz quadrada para dizer, duas casas decimais.

Como arredondar um número de ponto flutuante em Python

Vamos definir uma função round_2() que recebe um valor de ponto flutuante e o arredonda para duas casas decimais.

def round_2(num):
  return round(num,2)

Agora, você pode usar a função map() com a lista round_2 e nums_sqrt.

nums_sqrt_round = list(map(round_2,nums_sqrt))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Você também pode usar funções map() aninhadas, em que a função map interna é usada para calcular a lista de raiz quadrada nums_sqrt e a função map externa executa a operação de arredondamento.

nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums))))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

As saídas são idênticas em ambas as abordagens acima. No entanto, você deve garantir que o código seja legível e de fácil manutenção ao aninhar funções conforme mostrado acima.

Como usar a função map() com funções do Lambda

Nas seções anteriores, você aprendeu a usar a função map() do Python com funções integradas e definidas pelo usuário. Agora você aprenderá a usar a função map() com funções lambda, que são anônimas em Python.

Às vezes, você terá uma função cujo corpo contém apenas uma linha de código e pode ser necessário usar a função apenas uma vez e não referenciá-la em outro lugar no programa. Você pode definir essas funções como uma função lambda em Python.

Nota: lambda args: expression é a sintaxe geral para usar uma função lambda do Python.

#1. Considere as seguintes cadeias de caracteres de lista. Suponha que você queira obter uma lista strings_rev – contendo uma cópia invertida de cada uma das strings.

strings = ['JavaScript','Rust','Python','Go']

Podemos reverter uma string Python usando o fatiamento de string.

  Xbox tem Mario Kart?

Nota: Esta é uma generalização da expressão de fatiamento de string str[start:stop:step].

– Sem os valores inicial e final, a fatia começa no início da string e se estende até o final da string.
– Valores negativos de step fornecem fatias a partir do final da string.
– Portanto, str[::-1] retorna uma cópia invertida de str.

Você pode usar esta função lambda: lambda x:x[::-1]Dentro da função map, como mostrado abaixo.

strings_rev = list(map(lambda x:x[::-1],strings))
print(strings_rev)

Assim como em outros exemplos, lançamos o objeto map em uma lista. Na saída, vemos que cada uma das strings nas strings da lista foi invertida.

Output
['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2. Na seção anterior, calculamos a raiz quadrada de cada número na lista de números e, em seguida, arredondamos cada valor da raiz quadrada para duas casas decimais.

Usamos a função round_2() para fazer isso. Vamos reescrever a função round_2() como uma função lambda e usá-la com a função map() descrita abaixo.

nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt))
print(nums_sqrt_round_l)

Como visto abaixo, a saída é idêntica à que obtivemos usando a função round_2().

Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Como usar a função map() com vários iteráveis

Nos exemplos que vimos, aplicamos uma função em todos os itens de exatamente um iterável.

Às vezes, podemos ter funções que recebem dois ou mais argumentos. Nesse caso, cada argumento é armazenado em uma lista ou em qualquer coleção semelhante.

Também podemos usar a função map() do Python com várias listas.

#1. Considere a seguinte função area() que aceita o comprimento e a largura como entradas e retorna a área, comprimento*largura.

def area(length,breadth):
  return length*breadth

O comprimento e a largura de diferentes retângulos são armazenados em duas listas separadas, comprimentos e larguras, respectivamente.

lengths = [4,8,10,18]
breadths = [9,4,6,11]

Podemos usar a função map() para aplicar a função area nas listas acima passando as listas de comprimentos e larguras.

areas = list(map(area,lengths,breadths))
print(areas)

Como a área da função aceita dois argumentos, os valores de comprimento e largura são usados ​​a partir das larguras dos comprimentos das listas, respectivamente.

Output
[36, 32, 60, 198]

#2. O módulo matemático do Python tem a função log que nos ajuda a calcular o logaritmo de um número para qualquer base.

Nota: log(x, base) retorna o valor de log x para a base especificada pelo valor base, log base x. Se a base não for especificada, o valor base padrão será e (log calcula o logaritmo natural).

Neste exemplo:

  • A lista x corresponde aos valores para os quais você gostaria de calcular o logaritmo.
  • A lista de base contém todos os valores de base a serem usados ​​no cálculo do logaritmo.
x = [2,6,12,10]
base = [2,3,2,5]

Podemos usar a função map() do Python com math.log, as listas, x e base para obter a nova lista log_x, como segue.

log_x = list(map(math.log,x,base))
print(log_x)

Aqui está a saída.

Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

Conclusão

Aqui está um resumo do que você aprendeu neste tutorial:

  • A função map() do Python recebe pelo menos dois argumentos: uma função e um iterável, com a sintaxe map(function, iterable(s)).
  • A função pode ser qualquer chamada Python válida.
  • Quando a função recebe k argumentos, use a função map() com a função e cada um dos k argumentos em um iterável.

Em seguida, aprenda a trabalhar com conjuntos em Python.