La fonction map en Python
Découvrez les secrets de la fonction map en Python qui permet d’appliquer une fonction sur un itérable comme une liste !
En Python, la fonction map
applique une fonction sur un itérable (comme une liste).
Prenons par exemple une fonction qui rend pair tous les nombres d’une liste :
def rendre_pair(n):
if n % 2 == 1:
return n + 1
else:
return n
nombres = [1, 2, 3, 4, 5, 6]
resultat = map(rendre_pair, nombres)
print(list(resultat)) # on wrap le résultat dans une liste
On obtiendra une nouvelle [2, 2, 4, 4, 6, 6]
. Notre liste initiale nombres
reste inchangée.
Comme la fonction map retourne un objet map
, on doit le wrapper dans une liste pour rendre son résultat visible.
💡 Vous voulez en apprendre plus sur les fonctions comme
map()
? J’ai écrit un article qui reprend toutes les fonctions natives en Python.
Qu’est-ce que la fonction map en Python ?
La fonction map existe dans de nombreux langages de programmation.
En Python, map fait partie des fonctions natives. Elle permet d’exécuter une fonction sur un itérable et retourne un objet map.
Utiliser map revient à faire un mapping qui fait partie du paradigme de la programmation fonctionnelle.
On préfère donc utiliser une alternative à map comme les listes en compréhension qui rendent le code plus lisible.
Map reste intéressant à apprendre pour avoir une meilleure connaissance de python et de la programmation fonctionnelle.
Comment utiliser la fonction map ?
Dans sa forme la plus courte, la fonction map ressemble à ça :
map(fonction, iterable)
Mais on peut passer une infinité d’itérables à la fonction map.
map(fonction, iterable1, iterable1, ..., iterableN)
Ou plus précisement, on peut passer le nombre d’itérables égale au nombre d’arguments dans la fonction passer en premier paramètre.
Ainsi, on peut se retrouver avec :
def addition(a, b):
return a + b
nombres1 = [1, 2, 3]
nombres2 = [4, 5, 6]
print(list(map(addition, nombres1, nombres2)))
À noter qu’il faut bien le nombre d’itérables en fonction du nombres d’arguments dans la fonction addition
.
En effet, map(addition, nombres1)
levera une erreur disant qu’il manque l’arguement b
.
Si on donne trop de paramètres, map(addition, nombres1, nombres2, [7, 8 , 9])
génerera une erreur disant qu’on a fourni 3 arguments alors qu’on s’attendait à en avoir 2.
Comment utiliser map avec des fonctions lambda ?
On peut passer une fonction lambda dans la fonction native map pour l’appliquer directement à un itérable.
nombres = [1, 2, 3, 4]
carres = map(lambda n: n ** 2, nombres)
print(list(carres)) # [1, 4, 9, 16]
En Python, une fonction lambda est une fonction anonyme qui est composé d’une seule expression et qui a qui on peut passer un nombre indéfini de paramètres.
💡 Vous souhaitez en apprendre plus sur lambda ? Alors mon article sur les fonctions anonymes avec lambda vous intéressera sûrement !
Prenons cette fonction lambda qui ajoute 1 à un nombre n.
lambda n : n + 1
Cette fonction lambda est strictement égale à une fonction classique :
def addition(n):
return n + 1
Les fonctions lambda sont faites pour être exécutées directement comme elles n’ont pas de nom, on ne peut pas les réutiliser plus tard.
Pour remédier à ça, on peut sauver une fonction lambda en l’assignant à une variable, par exemple :
addition = lambda n: n + 1
print(addition(4)) # 5
💡 Si vous connaissez un peu JavaScript, vous pouvez voir une fonction lambda comme l’équivalent d’une arrow-function sans
{}
,(a, b) => expression
.
Sur quels types peut-on utiliser la fonction map en Python ?
On peut utiliser la fonction map
sur tous types d’itérables comme les listes list
, strings str
et tuple
.
Ce n’est pas parce que vous utilisez un type d’itérable (comme une liste par exemple) que vous ne pouvez pas finir avec un autre type (comme un tuple).
Ainsi, on peut tout à fait avoir :
multi = map(lambda s: int(s), '123')
print(list(multi)) # [1, 2, 3]
Ici, on transforme une chaîne de caractères en une liste d’entiers.
Utiliser map avec une liste en Python
La fonction native map
peut prendre une liste en argument en position 2 et plus. L’objet map que la fonction map génère peut être transformée en liste avec la fonction native list
.
l = map(lambda x: x ** 3, [1, 2, 3])
print(list(l)) # [1, 8, 27]
Utiliser map avec une string en Python
La fonction native map
peut prendre une chaîne de caractères (strings) en argument en position 2 et plus. L’objet map que la fonction map génère peut être transformée de nouveau en string en utilisant la méthode join
et la fonction list
.
res = map(lambda x: x.upper(), 'commentcoder.com')
print(''.join(list(res))) # 'COMMENTCODER.COM'
Utiliser map avec un tuple en Python
La fonction native map
peut prendre un ou plusieurs tuples en argument en position 2 et plus. L’objet map que la fonction map génère peut être transformée en tuple avec la fonction native tuple
.
res = map(lambda x: x + 1, (1, 2, 3))
print(tuple(res)) # (2, 3, 4)
Allez-vous utiliser la fonction map en Python ?
Bravo, vous savez maintenant utiliser la fonction native map en Python !
Voici un récapitulatif rapide. On l’utilise comme ça :
def mettre_au_carre(n):
return n ** 2
nombres = [1, 2, 3, 4]
resultat = map(mettre_au_carre, nombres)
print(list(resultat))
Comme on l’a vu, map
n’est pas très “pythoniste” et on pourrait écrire cette de manière beaucoup lisible avec une compréhension de liste :
nombres = [1, 2, 3, 4]
print([n ** 2 for n in nombres])
💡 Vous voulez en apprendre plus sur cette syntaxe pour construire des listes en Python ? Alors mon article Comment utiliser les listes en compréhension ? vous intéressera sûrement !
Servez-vous donc de map quand c’est vraiment justifié ! D’ailleurs dites nous sur Twitter quand, comment et pourquoi vous avez utilisé map pour la dernière fois.
Voici certains des articles les plus populaires en Python :
Les 10 meilleurs livres pour apprendre Python en 2024
Les meilleurs cours pour apprendre Python en 2024
Les expressions conditionnelles en Python
Comment utiliser les puissances en Python ?
Le Guide Ultime pour Apprendre Python en 2024
7 idées de projets en Python pour débutants
Les 7 meilleurs livres Django en 2024
Comment créer un Bot Telegram en Python ?
Comment créer un Bot Discord en Python ?
Je m'appelle Thomas, et je code depuis plus de 20 ans. Depuis ma sortie de la première promotion de l'École 42, j'ai conçu et développé des centaines d'applications et de sites web. Sur ce blog, je partage avec vous les stratégies les plus efficaces pour maîtriser l'art de coder et progresser rapidement.