Fonction Python map(), expliquée avec des exemples

Dans ce didacticiel, vous apprendrez à utiliser la fonction Python map() pour appliquer une fonction sur tous les éléments d’un itérable.

Python prend en charge le paradigme de la programmation fonctionnelle qui vous permet de définir des tâches en tant que calcul de fonctions par programmation. Vous pouvez traiter les fonctions Python comme des objets : une fonction peut prendre une autre fonction comme paramètre et renvoyer une autre fonction.

La fonction map() prend une fonction en argument et vous permet de l’appliquer à tous les éléments d’une séquence.

À la fin de ce didacticiel, vous serez en mesure d’utiliser la fonction Python map() – pour réécrire les boucles détaillées et les compréhensions de liste. Vous allez coder plusieurs exemples pour comprendre les différentes manières d’utiliser la fonction map().

Comment appliquer une fonction aux éléments d’une liste Python

Commençons notre discussion par un exemple.👩‍🏫

Ici nums est une liste de nombres.

nums = [2,4,3,7]

Ensuite, considérez la fonction self_pow(). La fonction self_pow() prend un nombre en argument et renvoie le nombre élevé à la puissance du nombre lui-même : n**n.

En Python, ** est l’opérateur d’exponentiation. a**b renvoie la valeur de a élevée à la puissance b, ab.

def self_pow(n):
  return n**n

TO-DO : Créer une nouvelle liste nums_pow en appliquant la fonction self_pow() à chaque élément de la liste nums.

Utilisation de la boucle for

Pour ce faire, vous pouvez utiliser les boucles for en Python :

  • Pour chaque nombre dans la liste nums, appelez la fonction self_pow() avec num comme argument.
  • Ajoutez le résultat de l’appel de fonction à la nouvelle liste nums_pow.
nums_pow = []

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

print(nums_pow)

Dans la sortie, chaque nombre nums est élevé à lui-même. Les éléments de la liste nums_pow sont les suivants : 22, 44, 33,77.

Output
[4, 256, 27, 823543]

Utilisation de la compréhension de liste

Vous pouvez rendre cela concis en utilisant la compréhension de liste. À partir de la boucle for explicite ci-dessus, nous pouvons identifier l’expression de sortie et la liste à parcourir.

Nous pouvons alors modifier l’expression générique de compréhension de liste :

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

L’expression de compréhension de liste pour générer la liste nums_pow est la suivante :

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

La sortie est la même que celle de l’utilisation de boucles for, comme prévu.

Output
[4, 256, 27, 823543]

Au lieu de la compréhension des boucles et des listes, vous pouvez utiliser la fonction Python map() avec une syntaxe concise et aide à appliquer la fonction à tous les éléments d’un itérable. Commençons par apprendre la syntaxe de la fonction map.

Syntaxe de la fonction Python map()

La syntaxe générale pour utiliser la fonction Python map() est la suivante :

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

La fonction map() prend au moins deux arguments, une fonction et un itérable.

Dans la syntaxe ci-dessus :

  • function désigne une fonction Python ou, en général, tout Python appelable. Cela inclut les fonctions définies par l’utilisateur et intégrées, les classes, les méthodes d’instance et de classe, etc.
  • iterable est tout itérable Python valide, tel qu’une liste, un tuple et une chaîne.
  • La fonction map() s’applique et la fonction est utilisée pour chaque élément de l’itérable.

Que renvoie la fonction map() ?

Il renvoie un objet de carte. Vous pouvez ensuite convertir l’objet map en liste en utilisant la syntaxe : list(map(function,iterable)).

Selon le cas d’utilisation, vous pouvez le convertir en un tuple Python.

Maintenant que vous avez appris la syntaxe de la fonction Python map(), commençons à coder des exemples.

Vous devriez avoir Python 3.x pour suivre ce tutoriel. Sinon, vous pouvez exécuter les extraits de code dans l’éditeur Python en ligne toptips.fr.

Comment utiliser la fonction map() avec des fonctions définies par l’utilisateur

#1. Auparavant, nous avions appliqué la fonction self_pow() à chaque nombre de la liste nums. Dans la syntaxe de la fonction map(), nous pouvons passer la fonction self_pow et les numéros de liste comme arguments.

Remarque : Vous ne devez spécifier que le nom de la fonction et non un appel de fonction. Utilisez self_pow et non self_pow().

La fonction map() renvoie un objet map.

print(map(self_pow,nums))

<map object at 0x7f7d315c14d0>

Nous pouvons ensuite transformer l’objet map en une liste à l’aide de la fonction list(), comme indiqué ci-dessous.

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

Voici la sortie où chaque num dans nums est mappé à numnum dans la liste nums_pow.

Output
[4, 256, 27, 823543]

#2. Considérez la fonction suivante inch_to_cm() qui convertit les pouces en centimètres. 1 pouce = 2,54 cm.

def inch_to_cm(inch):
  return inch*2.54

Pour convertir les valeurs en pouces de la liste des pouces en centimètres, vous pouvez utiliser la fonction map() comme indiqué dans la cellule de code ci-dessous.

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

La liste cms contient les valeurs en pouces exprimées en centimètres.

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

Comment utiliser la fonction map() avec les fonctions intégrées

Dans cette section, nous allons apprendre à utiliser map() avec des fonctions intégrées en Python.

#1. La liste des chaînes est une liste de langages de programmation. Vous souhaitez créer une nouvelle liste strings_upper contenant les chaînes du langage de programmation en majuscules.

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

La méthode de chaîne intégrée .upper() agit sur une chaîne et renvoie une copie formatée en majuscule.

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

La liste strings_upper inclut des chaînes dans la liste des chaînes formatées en majuscules.

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

#2. La fonction intégrée len() de Python prend une séquence comme argument et renvoie sa longueur. Pour trouver la longueur de chacune des chaînes dans la liste des chaînes, nous pouvons utiliser la fonction map() et appliquer la fonction de longueur sur chaque chaîne, comme indiqué ci-dessous.

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

#3. Vous pouvez utiliser la fonction map() avec d’autres collections telles que les tuples.

L’exemple suivant contient un tuple contenant des informations sur le nombre de chambres, la zone et la ville dans laquelle se trouve une maison.

En Python, la fonction type() renvoie le type de données de tout objet Python. Pour obtenir le type de données de tous les éléments de ce tuple, vous pouvez utiliser la fonction map() pour appeler la fonction type sur chaque élément de tuple.

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

Nous avons converti l’objet map en un tuple. Vous pouvez également lancer dans une liste ou toute autre collection.

Dans la sortie ci-dessous, nous voyons que les types de données de 2, 758.5 ​​et Bangalore ont été déduits comme ‘int’, ‘float’ et ‘str’, respectivement.

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

#4. En Python, vous pouvez importer des modules intégrés et utiliser les fonctions définies dans les modules.

Pour calculer la racine carrée de chaque nombre dans la liste des nombres, vous pouvez utiliser la fonction racine carrée sqrt du module mathématique.

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]

La sortie ci-dessus est difficile à analyser et à suivre. Vous voudrez peut-être arrondir chaque valeur de racine carrée pour dire, deux décimales.

Comment arrondir un nombre à virgule flottante en Python

Définissons une fonction round_2() qui prend une valeur à virgule flottante et l’arrondit à deux décimales.

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

Maintenant, vous pouvez utiliser la fonction map() avec les listes round_2 et 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]

Vous pouvez également utiliser des fonctions map() imbriquées, où la fonction de carte interne est utilisée pour calculer la liste racine carrée nums_sqrt, et la fonction de carte externe effectue l’opération d’arrondi.

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]

Les sorties sont identiques dans les deux approches ci-dessus. Cependant, vous devez vous assurer que le code est lisible et maintenable lors de l’imbrication des fonctions, comme indiqué ci-dessus.

Comment utiliser la fonction map() avec les fonctions Lambda

Dans les sections précédentes, vous avez appris à utiliser la fonction Python map() avec des fonctions intégrées et définies par l’utilisateur. Vous allez maintenant apprendre à utiliser la fonction map() avec les fonctions lambda, qui sont anonymes en Python.

Parfois, vous aurez une fonction dont le corps ne contient qu’une seule ligne de code, et vous devrez peut-être n’utiliser la fonction qu’une seule fois et ne pas la référencer ailleurs dans le programme. Vous pouvez définir de telles fonctions en tant que fonction lambda en Python.

Remarque : lambda args : expression est la syntaxe générale pour utiliser une fonction Python lambda.

#1. Considérez les chaînes de liste suivantes. Supposons que vous souhaitiez obtenir une liste strings_rev – contenant une copie inversée de chacune des chaînes.

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

Nous pouvons inverser une chaîne Python en utilisant le découpage de chaîne.

Remarque : il s’agit d’une généralisation de l’expression de découpage de chaîne str[start:stop:step].

– Sans les valeurs de début et de fin, la tranche commence au début de la chaîne et s’étend jusqu’à la fin de la chaîne.
– Les valeurs négatives de pas donnent des tranches à partir de la fin de la chaîne.
– Par conséquent, str[::-1] renvoie une copie inversée de str.

Vous pouvez utiliser cette fonction lambda : lambda x:x[::-1]À l’intérieur de la fonction de carte, comme indiqué ci-dessous.

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

Comme avec d’autres exemples, nous transformons l’objet map en une liste. Dans la sortie, nous voyons que chacune des chaînes de la liste des chaînes a été inversée.

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

#2. Dans la section précédente, nous avons calculé la racine carrée de chaque nombre dans la liste des nombres, puis arrondi chaque valeur de racine carrée à deux décimales.

Nous avons utilisé la fonction round_2() pour ce faire. Réécrivons la fonction round_2() en tant que fonction lambda et utilisons-la avec la fonction map() décrite ci-dessous.

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

Comme on le voit ci-dessous, la sortie est identique à ce que nous avons obtenu en utilisant la fonction round_2().

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

Comment utiliser la fonction map() avec plusieurs itérables

Dans les exemples que nous avons vus, nous avons appliqué une fonction sur tous les éléments d’exactement un itérable.

Parfois, nous pouvons avoir des fonctions qui prennent deux arguments ou plus. Dans ce cas, chaque argument est stocké dans une liste ou toute collection similaire.

Nous pouvons également utiliser la fonction Python map() avec plusieurs listes.

#1. Considérez la fonction suivante area() qui accepte la longueur et la largeur comme entrées et renvoie la surface, length*breadth.

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

La longueur et la largeur des différents rectangles sont stockées dans deux listes distinctes, longueurs et largeurs, respectivement.

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

Nous pouvons utiliser la fonction map() pour appliquer la fonction de zone sur les listes ci-dessus en transmettant à la fois les listes de longueurs et de largeurs.

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

Étant donné que la zone de fonction accepte deux arguments, les valeurs de longueur et de largeur sont utilisées à partir des listes longueurs largeurs, respectivement.

Output
[36, 32, 60, 198]

#2. Le module mathématique Python a la fonction log qui nous aide à calculer le logarithme d’un nombre dans n’importe quelle base.

Remarque : log(x, base) renvoie la valeur de log x à la base spécifiée par la valeur base, log base x. Si la base n’est pas spécifiée, la valeur de base par défaut est e (log calcule le logarithme népérien).

Dans cet exemple :

  • La liste x correspond aux valeurs dont vous souhaitez calculer le logarithme.
  • La liste de base contient toutes les valeurs de base à utiliser dans le calcul du logarithme.
x = [2,6,12,10]
base = [2,3,2,5]

Nous pouvons utiliser la fonction Python map() avec math.log, les listes, x et base pour obtenir la nouvelle liste log_x, comme suit.

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

Voici la sortie.

Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

Conclusion

Voici un résumé de ce que vous avez appris dans ce didacticiel :

  • La fonction Python map() prend au moins deux arguments : une fonction et un itérable, avec la syntaxe map(function, iterable(s)).
  • La fonction peut être n’importe quel appel Python valide.
  • Lorsque la fonction prend k arguments, utilisez la fonction map() avec la fonction et chacun des k arguments dans un itérable.

Ensuite, apprenez à travailler avec des ensembles en Python.