La fonction map est une fonction built-in de Python et permet d'appliquer une fonction à chaque élément d'un ou plusieurs itérables de manière concise.
La fonction retourne un objet map, qui est un itérateur. Ce qui veut dire que map est efficace en termes de mémoire, car les éléments sont générés à la demande.
Syntaxe
La syntaxe de map est la suivante :
map(fonction, iterable1, iterable2, ...)
-
fonctionest la fonction qui sera appliquée à chaque itérable -
iterable1,iterable2, ... sont les itérables auxquels nous appliquons la fonction. Il faut au moins un itérable, mais on peut en passer plusieurs (si la fonction les acceptent)
Comme la fonction retourne un itérateur, pour visualiser le contenu, il est courant de le convertir en une liste.
Exemples
Voici un exemple très simple :
nombres = [1, 2, 3, 4, 5] def carre(n): return n**2 # Appliquer la fonction 'carre' à chaque élément de la liste 'nombres' resultats_map = map(carre, nombres) # Convertir l'itérateur en liste pour l'afficher resultats_liste = list(resultats_map) print(resultats_liste) # [1, 4, 9, 16, 25]
Il est aussi courant d'utiliser map avec une fonction lambda pour des opérations simples :
mots = ["la", "puissance", "de", "map"] # Mettre en majuscule chaque mot de la liste mots_maj = list(map(lambda mot: mot.upper(), mots)) print(mots_maj) # ['LA', 'PUISSANCE', 'DE', 'MAP']
map est capable de travailler avec plusieurs itérables en parallèle. La fonction passée en argument doit avoir autant de paramètres que d'itérables. L'itération s'arrête dès que le plus court des itérables est épuisé.
# Exemple avec deux itérables nombres1 = [1, 2, 3] nombres2 = [10, 20, 30] # Additionner les éléments des deux listes sommes = list(map(lambda x, y: x + y, nombres1, nombres2)) print(sommes) # [11, 22, 33] # Exemple avec trois itérables nombres1 = [1, 2, 3] nombres2 = [10, 20, 30] nombres3 = [100, 200, 300] # Additionner les éléments des trois listes sommes_trois = list(map(lambda x, y, z: x + y + z, nombres1, nombres2, nombres3)) print(sommes_trois) # [111, 222, 333]
Remplacement de map par une compréhension de liste
Comme nous l'avons vu dans le glossaire sur les compréhensions de liste, ces dernières peuvent souvent remplacer map pour transformer les listes :
nombres = [1, 2, 3, 4, 5] # Avec map() et lambda carres_map = list(map(lambda x: x**2, nombres)) print(carres_map) # Avec une compréhension de liste carres_comp = [x**2 for x in nombres] print(carres_comp)
Les deux lignes de code produisent le même résultat, mais les compréhensions de liste sont considérées comme plus "pythonique". De plus, elles permettent de combiner une transformation et un filtrage :
# Carré des nombres pairs uniquement nombres = [1, 2, 3, 4, 5, 6] # Avec une compréhension de liste (simple et clair) carres_pairs_comp = [x**2 for x in nombres if x % 2 == 0] # [4, 16, 36] # Avec map et filter (plus complexe) carres_pairs_map = list(map(lambda x: x**2, filter(lambda x: x % 2 == 0, nombres))) # [4, 16, 36]
Nous pouvons préférez map pour bénéficier de l'évaluation paresseuse de l'itérateur retourné par map.