Python map() Funktion, erklärt mit Beispielen

In diesem Tutorial erfahren Sie, wie Sie die Python-Funktion map() verwenden, um eine Funktion auf alle Elemente einer Iterable anzuwenden.

Python unterstützt das Paradigma der funktionalen Programmierung, mit dem Sie Aufgaben programmgesteuert als Berechnung von Funktionen definieren können. Sie können Python-Funktionen als Objekte behandeln: Eine Funktion kann eine andere Funktion als Parameter annehmen und eine andere Funktion zurückgeben.

Die Funktion map() übernimmt eine Funktion als Argument und lässt Sie sie auf alle Elemente in einer Sequenz anwenden.

Am Ende dieses Tutorials können Sie die Python-Funktion map() verwenden, um ausführliche Schleifen neu zu schreiben und Verständnisse aufzulisten. Sie werden mehrere Beispiele codieren, um zu verstehen, wie Sie die map()-Funktion auf verschiedene Weise verwenden können.

So wenden Sie eine Funktion auf Elemente einer Python-Liste an

Beginnen wir unsere Diskussion mit einem Beispiel.👩‍🏫

Hier ist nums eine Liste von Zahlen.

nums = [2,4,3,7]

Betrachten Sie als Nächstes die Funktion self_pow(). Die Funktion self_pow() nimmt eine Zahl als Argument und gibt die Zahl potenziert mit der Zahl selbst zurück: n**n.

In Python ist ** der Potenzierungsoperator. a**b gibt den Wert von a potenziert mit b, ab zurück.

def self_pow(n):
  return n**n

TO-DO: Erstellen einer neuen Liste nums_pow durch Anwenden der Funktion self_pow() auf jedes Element in der Liste nums.

For-Schleife verwenden

Dazu können Sie for-Schleifen in Python verwenden:

  • Rufen Sie für jede Zahl in der nums-Liste die Funktion self_pow() mit num als Argument auf.
  • Hängen Sie das Ergebnis des Funktionsaufrufs an die neue Liste nums_pow an.
nums_pow = []

for num in nums:
  nums_pow.append(self_pow(num))

print(nums_pow)

In der Ausgabe wird jede Zahl num auf sich selbst erhöht. Die Elemente in der nums_pow-Liste sind wie folgt: 22, 44, 33,77.

Output
[4, 256, 27, 823543]

Listenverständnis verwenden

Sie können dies mithilfe des Listenverständnisses prägnant machen. Aus der obigen expliziten for-Schleife können wir den Ausgabeausdruck und die Liste identifizieren, die durchlaufen werden soll.

Wir können dann den generischen Listenverständnisausdruck ändern:

new_list = [<output expression> for item in iterable]

Der Listenverständnisausdruck zum Generieren der nums_pow-Liste lautet wie folgt:

nums_pow = [self_pow(num) for num in nums]
print(nums_pow)

Die Ausgabe ist erwartungsgemäß die gleiche wie bei der Verwendung von for-Schleifen.

Output
[4, 256, 27, 823543]

Anstelle des Schleifen- und Listenverständnisses können Sie die Python-Funktion map() mit einer prägnanten Syntax verwenden und dabei helfen, die Funktion auf alle Elemente in einem Iterable anzuwenden. Beginnen wir damit, die Syntax der Kartenfunktion zu lernen.

Python map() Funktionssyntax

Die allgemeine Syntax zur Verwendung der Python-Funktion map() lautet wie folgt:

map(function, iterable_1,[iterable_2,...,iterable_n])

Die Funktion map() akzeptiert mindestens zwei Argumente, eine Funktion und eine iterable.

In der obigen Syntax:

  • Funktion bezeichnet eine Python-Funktion oder allgemein jede aufrufbare Python-Funktion. Dazu gehören benutzerdefinierte und integrierte Funktionen, Klassen, Instanz- und Klassenmethoden und mehr.
  • iterable ist eine beliebige gültige Python-Iterable, z. B. eine Liste, ein Tupel und eine Zeichenfolge.
  • Die Funktion map() gilt, und die Funktion wird für jedes Element in der Iterable verwendet.

Was gibt die Funktion map() zurück?

Es gibt ein Kartenobjekt zurück. Anschließend können Sie das Kartenobjekt mithilfe der folgenden Syntax in eine Liste umwandeln: list(map(function,iterable)).

Je nach Anwendungsfall können Sie es in ein Python-Tupel umwandeln.

Nachdem Sie nun die Syntax der Python-Funktion map() gelernt haben, beginnen wir mit der Codierung von Beispielen.

Sie sollten über Python 3.x verfügen, um diesem Tutorial folgen zu können. Andernfalls können Sie die Codeausschnitte im wdzwdz-Online-Python-Editor ausführen.

Verwendung der map()-Funktion mit benutzerdefinierten Funktionen

#1. Zuvor hatten wir die Funktion self_pow() auf jede Zahl in der nums-Liste angewendet. In der Syntax für die Funktion map() können wir die Funktion self_pow und die Liste nums als Argumente übergeben.

Hinweis: Sie sollten nur den Namen der Funktion und keinen Funktionsaufruf angeben. Verwenden Sie self_pow und nicht self_pow().

Die Funktion map() gibt ein Kartenobjekt zurück.

print(map(self_pow,nums))

<map object at 0x7f7d315c14d0>

Wir können das Kartenobjekt dann mit der Funktion list() in eine Liste umwandeln, wie unten gezeigt.

nums_pow = list(map(self_pow,nums))
print(nums_pow)

Hier ist die Ausgabe, bei der jede Zahl in Zahlen auf Zahl in der Liste nums_pow abgebildet wird.

Output
[4, 256, 27, 823543]

#2. Betrachten Sie die folgende Funktion inch_to_cm(), die Zoll in Zentimeter umwandelt. 1 Zoll = 2,54 cm.

def inch_to_cm(inch):
  return inch*2.54

Um die Zollwerte in der Zollliste in Zentimeter umzuwandeln, können Sie die Funktion map() verwenden, wie in der Codezelle unten gezeigt.

inches = [5.54,3.4,1,25,8.2]
cms = list(map(inch_to_cm,inches))
print(cms)

Die cms-Liste enthält die Zollwerte in Zentimetern.

Output
[14.0716, 8.636, 2.54, 63.5, 20.828]

So verwenden Sie die Funktion map() mit integrierten Funktionen

In diesem Abschnitt lernen wir, wie man map() mit eingebauten Funktionen in Python verwendet.

#1. Die Liste strings ist eine Liste von Programmiersprachen. Sie möchten eine neue Liste strings_upper erstellen, die die Zeichenfolgen der Programmiersprache in Großbuchstaben enthält.

strings = ['JavaScript','Rust','Python','Go']

Die eingebaute String-Methode .upper() wirkt auf einen String und gibt eine in Großbuchstaben formatierte Kopie zurück.

strings_upper = list(map(str.upper,strings)) 
print(strings_upper)

Die Liste strings_upper enthält Zeichenfolgen in der Liste Zeichenfolgen, die in Großbuchstaben formatiert sind.

Output
['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2. Die eingebaute Funktion len() in Python übernimmt eine Sequenz als Argument und gibt ihre Länge zurück. Um die Länge jeder Zeichenfolge in der Zeichenfolgenliste zu ermitteln, können wir die Funktion map() verwenden und die Längenfunktion auf jede Zeichenfolge anwenden, wie unten gezeigt.

strings_len = list(map(len,strings))
print(strings_len)
Output
[10, 4, 6, 2]

#3. Sie können die Funktion map() mit anderen Sammlungen wie Tupeln verwenden.

Das folgende Beispiel enthält ein Tupel, das Informationen über die Anzahl der Schlafzimmer, die Gegend und die Stadt enthält, in der sich ein Haus befindet.

In Python gibt die Funktion type() den Datentyp eines beliebigen Python-Objekts zurück. Um den Datentyp aller Elemente in diesem Tupel abzurufen, können Sie die Funktion map() verwenden, um die Typfunktion für jedes Tupelelement aufzurufen.

house = (2,758.5,'Bangalore')
house_elt_type = tuple(map(type,house))
print(house_elt_type)

Wir haben das Kartenobjekt in ein Tupel umgewandelt. Sie können auch in eine Liste oder eine andere Sammlung umwandeln.

In der Ausgabe unten sehen wir, dass die Datentypen von 2, 758,5 und Bangalore jeweils als „int“, „float“ und „str“ abgeleitet wurden.

Output
(<class 'int'>, <class 'float'>, <class 'str'>)

#4. In Python können Sie integrierte Module importieren und die in den Modulen definierten Funktionen verwenden.

Um die Quadratwurzel jeder Zahl in der Zahlenliste zu berechnen, können Sie die Quadratwurzelfunktion sqrt aus dem Mathematikmodul verwenden.

import math
nums = [30,90,34,45,97]
nums_sqrt = list(map(math.sqrt,nums))
print(nums_sqrt)
Output
[5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]

Die obige Ausgabe ist schwer zu analysieren und zu verfolgen. Möglicherweise möchten Sie jeden Quadratwurzelwert auf zwei Dezimalstellen runden.

So runden Sie eine Gleitkommazahl in Python

Lassen Sie uns eine Funktion round_2() definieren, die einen Fließkommawert nimmt und ihn auf zwei Dezimalstellen rundet.

def round_2(num):
  return round(num,2)

Jetzt können Sie die map()-Funktion mit der round_2- und der nums_sqrt-Liste verwenden.

nums_sqrt_round = list(map(round_2,nums_sqrt))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Sie können auch verschachtelte map()-Funktionen verwenden, wobei die innere map-Funktion verwendet wird, um die Quadratwurzelliste nums_sqrt zu berechnen, und die äußere map-Funktion die Rundungsoperation durchführt.

nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums))))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Die Ausgaben sind bei beiden obigen Ansätzen identisch. Sie sollten jedoch sicherstellen, dass der Code lesbar und wartbar ist, wenn Sie Funktionen wie oben gezeigt verschachteln.

Verwendung der map()-Funktion mit Lambda-Funktionen

In den vorherigen Abschnitten haben Sie gelernt, wie Sie die Python-Funktion map() mit integrierten und benutzerdefinierten Funktionen verwenden. Sie lernen jetzt, wie Sie die Funktion map() mit Lambda-Funktionen verwenden, die in Python anonym sind.

Manchmal haben Sie eine Funktion, deren Hauptteil nur eine Codezeile enthält, und Sie müssen die Funktion möglicherweise nur einmal verwenden und dürfen sie nicht an anderer Stelle im Programm referenzieren. Sie können solche Funktionen als Lambda-Funktion in Python definieren.

Hinweis: lambda args: expression ist die allgemeine Syntax zur Verwendung einer Python-Lambda-Funktion.

#1. Betrachten Sie die folgenden Listenzeichenfolgen. Angenommen, Sie möchten eine Liste strings_rev erhalten, die eine umgekehrte Kopie aller Strings enthält.

strings = ['JavaScript','Rust','Python','Go']

Wir können einen Python-String mit String Slicing umkehren.

Hinweis: Dies ist eine Verallgemeinerung des String-Slicing-Ausdrucks str[start:stop:step].

– Ohne die Start- und Stoppwerte beginnt das Slice am Anfang des Strings und erstreckt sich bis zum Ende des Strings.
– Negative Step-Werte ergeben Slices beginnend am Ende der Saite.
– Daher Str[::-1] gibt eine umgekehrte Kopie von str zurück.

Sie können diese Lambda-Funktion verwenden: lambda x:x[::-1]Innerhalb der Kartenfunktion, wie unten gezeigt.

strings_rev = list(map(lambda x:x[::-1],strings))
print(strings_rev)

Wie bei anderen Beispielen wandeln wir das Kartenobjekt in eine Liste um. In der Ausgabe sehen wir, dass jeder der Strings in den Listenstrings umgekehrt wurde.

Output
['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2. Im vorherigen Abschnitt haben wir die Quadratwurzel jeder Zahl in der Zahlenliste berechnet und dann jeden Quadratwurzelwert auf zwei Dezimalstellen gerundet.

Dazu haben wir die Funktion round_2() verwendet. Lassen Sie uns die Funktion round_2() als Lambda-Funktion umschreiben und sie mit der unten beschriebenen Funktion map() verwenden.

nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt))
print(nums_sqrt_round_l)

Wie unten zu sehen ist, ist die Ausgabe identisch mit der, die wir durch die Verwendung der Funktion round_2() erhalten haben.

Output
[5.48, 9.49, 5.83, 6.71, 9.85]

So verwenden Sie die Funktion map () mit mehreren Iterablen

In den Beispielen, die wir gesehen haben, haben wir eine Funktion auf alle Elemente genau einer Iterable angewendet.

Manchmal haben wir vielleicht Funktionen, die zwei oder mehr Argumente annehmen. In diesem Fall wird jedes Argument in einer Liste oder einer ähnlichen Sammlung gespeichert.

Wir können auch die Python-Funktion map() mit mehreren Listen verwenden.

#1. Betrachten Sie die folgende Funktion area(), die die Länge und Breite als Eingaben akzeptiert und die Fläche, Länge*Breite, zurückgibt.

def area(length,breadth):
  return length*breadth

Die Länge und Breite verschiedener Rechtecke werden in zwei getrennten Listen, Längen bzw. Breiten, gespeichert.

lengths = [4,8,10,18]
breadths = [9,4,6,11]

Wir können die map()-Funktion verwenden, um die area-Funktion auf die obigen Listen anzuwenden, indem wir sowohl die Längen- als auch die Breitenliste übergeben.

areas = list(map(area,lengths,breadths))
print(areas)

Da der Funktionsbereich zwei Argumente akzeptiert, werden die Längen- und Breitenwerte aus den Listen lengths widths verwendet.

Output
[36, 32, 60, 198]

#2. Das Python-Mathematikmodul hat die log-Funktion, die uns hilft, den Logarithmus einer Zahl zu einer beliebigen Basis zu berechnen.

Hinweis: log(x, base) gibt den Wert von log x auf die durch den Wert base, log base x, angegebene Basis zurück. Wenn die Basis nicht angegeben ist, ist der Standardbasiswert e (log berechnet den natürlichen Logarithmus).

In diesem Beispiel:

  • Die Liste x entspricht den Werten, für die Sie den Logarithmus berechnen möchten.
  • Die Basisliste enthält alle Basiswerte, die bei der Logarithmusberechnung verwendet werden sollen.
x = [2,6,12,10]
base = [2,3,2,5]

Wir können die Python-Funktion map() mit math.log, den Listen, x und base verwenden, um die neue Liste log_x wie folgt zu erhalten.

log_x = list(map(math.log,x,base))
print(log_x)

Hier ist die Ausgabe.

Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

Fazit

Hier ist eine Zusammenfassung dessen, was Sie in diesem Tutorial gelernt haben:

  • Die Python-Funktion map() akzeptiert mindestens zwei Argumente: eine Funktion und ein Iterable mit der Syntax map(function, iterable(s)).
  • Die Funktion kann ein beliebiger gültiger Python-Aufruf sein.
  • Wenn die Funktion k Argumente aufnimmt, verwenden Sie die Funktion map() mit der Funktion und jedem der k Argumente in einem Iterable.

Als Nächstes lernen Sie, wie Sie mit Mengen in Python arbeiten.