A quoi sert la fonction map ?

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, ...)
  • fonction est 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]
Un instant

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']
Un instant

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]
Un instant

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)
Un instant

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.

Bravo, tu es prêt à passer à la suite

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.