Heim  >  Artikel  >  Backend-Entwicklung  >  Verwendung der Funktionen map() und Reduce() in Python

Verwendung der Funktionen map() und Reduce() in Python

高洛峰
高洛峰Original
2017-03-11 10:06:011924Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung der Funktionen „map()“ und „reduc()“ in Python vorgestellt. Der Code basiert auf der Python2.x-Version.

Python ist integriert Funktion „map()“ und „reduc()“.

Wenn Sie Googles berühmtes Papier „MapReduce: Simplified Data Processing on Large Clusters“ gelesen haben, können Sie das Konzept von Map/Reduce grob verstehen.

Schauen wir uns zuerst die Karte an. Die Funktion „map()“ empfängt zwei Parameter, einer ist eine Funktion und der andere eine Sequenz. Map wendet die übergebene Funktion nacheinander auf jedes Element der Sequenz an und gibt das Ergebnis als neue Liste zurück.

Zum Beispiel haben wir eine Funktion f(x)=x2, und wir möchten diese Funktion auf eine Liste [1, 2, 3, 4, 5, 6, 7, 8, 9]. Sie können map() verwenden, um es wie folgt zu implementieren:

2015427113120966.png (341×245)

Jetzt verwenden wir Python-Code, um es zu implementieren:

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

Der erste von map() übergebene Parameter ist f, das Funktionsobjekt selbst.

Sie denken vielleicht, dass Sie die Funktion „map()“ nicht benötigen. Sie können eine Schleife schreiben und das Ergebnis berechnen:

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

Tatsächlich ja, aber können Sie anhand des obigen Schleifencodes auf einen Blick verstehen, „f(x) auf jedes Element der Liste anwenden und als Ergebnis eine neue Liste generieren“?

map() als Funktion höherer Ordnung abstrahiert also tatsächlich die Operationsregeln. Daher können wir nicht nur einfache f(x)=x2 berechnen, sondern auch jede komplexe Funktion, wie zum Beispiel: Konvertieren Sie alle Zahlen in dieser Liste in Zeichenfolgen:

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

Es ist nur eine Codezeile erforderlich.

Schauen Sie sich die Verwendung von Reduzieren an. Reduce wendet eine Funktion auf eine Sequenz an [x1, x2, x3...]. Diese Funktion muss zwei Parameter erhalten. Reduce setzt die kumulative Berechnung des Ergebnisses mit dem nächsten Element der Sequenz fort >reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3, x4)

Um beispielsweise eine Sequenz zu summieren, können Sie reduzieren verwenden Implementierung:

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

Natürlich kann die Summenoperation direkt mit der in Python integrierten Funktion sum() ausgeführt werden und ist nicht erforderlich reduzieren.

Aber wenn Sie die Folge [1, 3, 5, 7, 9] in die ganze Zahl 13579 umwandeln möchten, kann Reduzieren nützlich sein:

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

Dieses Beispiel selbst ist nicht sehr nützlich, aber wenn wir bedenken, dass der String str auch eine Sequenz ist, können wir das obige Beispiel leicht modifizieren und mit map() eine Funktion schreiben, die str in int konvertiert:

>>> 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

Die in einem str2int organisierte Funktion ist:

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

Es kann auch mit der Lambda-Funktion weiter vereinfacht werden:

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

Mit anderen Worten , vorausgesetzt, Python stellt die Funktion int() nicht zur Verfügung. Sie können selbst eine Funktion schreiben, um einen String in eine Ganzzahl umzuwandeln, und es sind nur ein paar Zeilen Code erforderlich!

Übung

Verwenden Sie die Funktion map(), um den vom Benutzer eingegebenen nicht standardmäßigen englischen Namen in einen Standardnamen mit dem ersten Buchstaben in Großbuchstaben und dem Rest zu ändern in Kleinbuchstaben. Eingabe: ['adam', 'LISA', 'barT'], Ausgabe: ['Adam', 'Lisa', 'Bart'].

Die von Python bereitgestellte sum()-Funktion kann eine Liste akzeptieren und die Summe berechnen. Bitte schreiben Sie eine prod()-Funktion, die eine Liste akzeptieren und Reduce() verwenden kann, um das Produkt zu berechnen.

Das obige ist der detaillierte Inhalt vonVerwendung der Funktionen map() und Reduce() in Python. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn