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

高洛峰
Libérer: 2017-03-11 10:06:01
original
1935 Les gens l'ont consulté

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]
Copier après la connexion

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
Copier après la connexion

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']
Copier après la connexion

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
Copier après la connexion

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
Copier après la connexion

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 {&#39;0&#39;: 0, &#39;1&#39;: 1, &#39;2&#39;: 2, &#39;3&#39;: 3, &#39;4&#39;: 4, &#39;5&#39;: 5, &#39;6&#39;: 6, &#39;7&#39;: 7, &#39;8&#39;: 8, &#39;9&#39;: 9}[s]
...
>>> reduce(fn, map(char2num, &#39;13579&#39;))
13579
Copier après la connexion

La fonction organisée en str2int est :

def str2int(s):
  def fn(x, y):
    return x * 10 + y
  def char2num(s):
    return {&#39;0&#39;: 0, &#39;1&#39;: 1, &#39;2&#39;: 2, &#39;3&#39;: 3, &#39;4&#39;: 4, &#39;5&#39;: 5, &#39;6&#39;: 6, &#39;7&#39;: 7, &#39;8&#39;: 8, &#39;9&#39;: 9}[s]
  return reduce(fn, map(char2num, s))
Copier après la connexion

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

def char2num(s):
  return {&#39;0&#39;: 0, &#39;1&#39;: 1, &#39;2&#39;: 2, &#39;3&#39;: 3, &#39;4&#39;: 4, &#39;5&#39;: 5, &#39;6&#39;: 6, &#39;7&#39;: 7, &#39;8&#39;: 8, &#39;9&#39;: 9}[s]
Copier après la connexion

def str2int(s):
  return reduce(lambda x,y: x*10+y, map(char2num, s))
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal