La fonction map en Python

Article publié le samedi 7 janvier 2023 et mis à jour le mercredi 3 avril 2024.

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 ?

Comment créer un Bot Instagram gratuitement avec Python ?

Créer un Bot Twitter avec Python et AWS Lambda

Comment Coder

Je m'appelle Thomas. J'ai commencé à coder dans mon enfance. Depuis ma sortie de la première promo de l'École 42, j'ai développé des centaines d'applications et sites web. Sur ce blog, je vous donne les meilleurs conseils et astuces pour apprendre comment apprendre à coder efficacement.