Maison  >  Article  >  développement back-end  >  Utilisation des fonctions map() et réduire() en Python

Utilisation des fonctions map() et réduire() en Python

高洛峰
高洛峰original
2017-03-11 10:06:011936parcourir

Cet article présente principalement l'utilisation de la fonction map() et de la fonction réduire() en Python. Le code est basé sur la version Python2.x. Les amis dans le besoin peuvent s'y référer

Python est intégré. Fonctions map() et réduire().

Si vous avez lu le célèbre article de Google "MapReduce: Simplified Data Processing on Large Clusters", vous pouvez à peu près comprendre le concept de map/reduce.

Regardons d’abord la carte. La fonction map() reçoit deux paramètres, l'un est une fonction et l'autre est une séquence. map applique tour à tour la fonction passée à chaque élément de la séquence et renvoie le résultat sous la forme d'une nouvelle liste.

Par exemple, par exemple, nous avons une fonction f(x)=x2, et nous voulons appliquer cette fonction à une liste [1, 2, 3, 4, 5, 6, 7, 8, 9]. Vous pouvez utiliser map() pour l'implémenter comme suit :

2015427113120966.png (341×245)

Maintenant, nous utilisons du code Python pour l'implémenter :

>>> def f(x):
...   return x * x
...
>>> map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
[1, 4, 9, 16, 25, 36, 49, 64, 81]

Le premier paramètre transmis par map() est f, qui est l'objet fonction lui-même.

Vous pensez peut-être que vous n'avez pas besoin de la fonction map(), vous pouvez écrire une boucle et calculer le résultat :

L = []
for n in [1, 2, 3, 4, 5, 6, 7, 8, 9]:
  L.append(f(n))
print L

En effet Oui, mais à partir du code de boucle ci-dessus, pouvez-vous comprendre d'un coup d'œil « appliquer f(x) à chaque élément de la liste et générer une nouvelle liste en conséquence » ?

Ainsi, map(), en tant que fonction d'ordre élevé, fait abstraction des règles de fonctionnement. Par conséquent, nous pouvons non seulement calculer f(x)=x2 simple, mais également calculer n'importe quelle fonction complexe, telle que, Convertissez tous les nombres de cette liste en chaînes :

>>> map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])
['1', '2', '3', '4', '5', '6', '7', '8', '9']

Une seule ligne de code est nécessaire.

Regardez l'utilisation de réduire. réduire applique une fonction à une séquence [x1, x2, x3...]. Cette fonction doit recevoir deux paramètres. réduire continue le calcul cumulé du résultat avec l'élément suivant de la séquence. L'effet est :

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)

Par exemple, pour additionner une séquence, vous pouvez utiliser réduire implémentation :

>>> def add(x, y):
...   return x + y
...
>>> reduce(add, [1, 3, 5, 7, 9])
25

Bien entendu, l'opération de somme peut être directement effectuée à l'aide de la fonction intégrée sum() de Python, et il n'est pas nécessaire d'utiliser réduire.

Mais si vous souhaitez transformer la séquence [1, 3, 5, 7, 9] en l'entier 13579, réduire peut s'avérer utile :

>>> def fn(x, y):
...   return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
13579

Cet exemple en lui-même n'est pas très utile, mais si l'on considère que la chaîne str est aussi une séquence, on peut légèrement modifier l'exemple ci-dessus et utiliser map() pour écrire une fonction qui convertit str en int :

>>> def fn(x, y):
...   return x * 10 + y
...
>>> def char2num(s):
...   return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
...
>>> reduce(fn, map(char2num, '13579'))
13579

La fonction organisée en str2int est :

def str2int(s):
  def fn(x, y):
    return x * 10 + y
  def char2num(s):
    return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
  return reduce(fn, map(char2num, s))

Cela peut également être encore simplifié à l'aide de la fonction lambda :

def char2num(s):
  return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]

def str2int(s):
  return reduce(lambda x,y: x*10+y, map(char2num, s))

En d'autres termes , en supposant que Python ne fournisse pas la fonction int() Vous pouvez écrire vous-même une fonction pour convertir une chaîne en entier, et cela ne nécessite que quelques lignes de code !

Exercice

Utilisez la fonction map() pour changer le nom anglais non standard saisi par l'utilisateur en un nom standard avec la première lettre en majuscule et le reste en minuscule. Entrée : ['adam', 'LISA', 'barT'], sortie : ['Adam', 'Lisa', 'Bart'].

La fonction sum() fournie par Python peut accepter une liste et calculer la somme. Veuillez écrire une fonction prod() qui peut accepter une liste et utiliser réduire() pour calculer le produit.


Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn