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

高洛峰
Freigeben: 2017-03-11 10:06:01
Original
1866 Leute haben es durchsucht

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]
Nach dem Login kopieren

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
Nach dem Login kopieren

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']
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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
Nach dem Login kopieren

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))
Nach dem Login kopieren

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]
Nach dem Login kopieren

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

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!