[Python] Richtige Verwendung der Karte

Einführung

Wenn Sie die Karte zum ersten Mal berühren, werden Sie sich fragen: "Ist die Definition so?"

map(function, list)

Das ist aber richtig.

map(callable, *iterable)

Ich werde diese wahre Bedeutung auf leicht verständliche Weise erklären, während ich "map (function, list)" gestalte.

Fügen Sie der Definition während der Formatierung ein? Mark hinzu

? map(function, list)

Frisch erlernte Anerkennung

Wenn Sie ein Objekt verwenden möchten, das für jedes Listenelement eine bestimmte Verarbeitung durchlaufen hat, verwenden Sie die Kartenfunktion. Der Rückgabewert ist ein Kartenobjekt, das eine Art Iterator ist. Ein Iterator ist ein Objekt, das mit einer for-Anweisung gedreht werden kann. Das Kartenobjekt ist keine Liste.

>>> iterable = map(int, ["1", "2", "3", "4", "5"])
>>> for i in iterable:
...    print(i)
... 
1
2
3
4
5

Ist die Definition so?

? map(function, list)

Nein, das zweite Argument nimmt tatsächlich eine Iterable an (ein Objekt, das ein Iterator sein kann). Mit anderen Worten, alles, was mit einer ** for-Anweisung ** gedreht werden kann, kann als Argument empfangen werden. Natürlich ist der Iterator selbst iterierbar.

? map(function, iterable)

Empfangen Sie ein Objekt (iterierbar), das ein Iterator sein kann

Mach dir keine Sorgen, iterable und iterator sind etwas anders.

Iterable kann verwendet werden, um das nächste Element mit der Funktion next zu extrahieren, und iterable kann mit der Funktion iter in einen Iterator konvertiert werden. Beispielsweise kann das Listenobjekt von der nächsten Funktion nicht aus dem ersten Element extrahiert werden, es kann jedoch von der Iterationsfunktion in einen Iterator (list_iterator) konvertiert werden. Dann kann list_iterator mit der nächsten Funktion das nächste Element abrufen.

a = [100, 200, 300]
# next(a) <-Error!
a_iter = iter(a)
next(a_iter) #100 wird herausgenommen

Es gibt viele andere iterierbare Objekte als list. Das Folgende ist ein Beispiel.

tuple

Da das Tupel mit einer for-Anweisung gedreht werden kann, kann es als zweites Argument der Map-Funktion angegeben werden.

>>> list(map(int,  ("1", "2", "3", "4", "5"))
[1, 2, 3, 4, 5]

dict

Der Schlüssel wird durch Drehen des Diktats mit der for-Anweisung herausgenommen. Wenn daher dict als zweites Argument der Map-Funktion angegeben wird, wird jeder Schlüssel zur Verarbeitung verwendet.

>>> list(map(lambda k: k+k, {"a": 2, "b": 3, "c": 5, "d": 7})
['aa', 'bb', 'cc', 'dd']

Wenn Sie sowohl den Schlüssel als auch den Wert abrufen möchten, verwenden Sie die Methode items von dict. Zu diesem Zeitpunkt wird das Tupel (sagen wir "x") von (Schlüssel, Wert) an die Funktion übergeben, die an das erste Argument der Map-Methode übergeben wird. Wenn Sie also den Schlüssel verwenden, verwenden Sie "x [0]", den Wert. In diesem Fall sollte es "x [1]" sein.

>>> list(map(lambda x: x[0]*x[1], {"a": 2, "b": 3, "c": 5, "d": 7}.items())
['aa', 'bbb', 'ccccc', 'ddddddd']

str

str kann auch mit einer for-Anweisung gedreht werden.

>>> "".join(map(lambda c: f'{c}"', 'Warum das'))
'Machen"U."Shi"Hand"Ist"Yo"Mm"Oh"'

Generatortyp

Der Generatorausdruck ist ebenfalls ein Iterator, die Verwendung von map ist jedoch redundant. Es ist besser, alles in einer Generatorformel zu beschreiben.

Nicht gut


map(lambda x: 2*x, i*i for i in range(9))

Yoshi


(2*i*i for i in range(9)) 

Kartenobjekt

Da das Kartenobjekt auch ein Iterator ist, kann es im zweiten Argument der Kartenmethode angegeben werden. Diese Methode ist jedoch wie die Generatorformel redundant. (Lesbarkeit kann gut sein)

python


map(bin, map(int, ["20","19","12","25"]))

python


map(lambda x: bin(int(x)), ["20","19","12","25"])

Dateiobjekt

Das von der Funktion open erstellte Dateiobjekt ist auch ein Iterator. Wenn Sie es mit der for-Anweisung drehen, wird es zeilenweise als Zeichenfolge extrahiert.

script.txt


Vielen Dank
Vielen Dank
Was sind deine Hobbies?
Ein bisschen LISP...
Ri...?
>>> print(*map(lambda line: f"「{line.strip()}」", open("script.txt")), sep="\n")
"Vielen Dank"
"Vielen Dank"
"Was sind deine Hobbies?"
"Ein bisschen LISP...」
"Ri...?」

Es kann auf verschiedene andere Iterables angewendet werden.

Funktion

? map(function, iterable)

Proprietäre Funktion

Die durch das Schlüsselwort ** def ** definierte Funktion kann auch im ersten Argument angegeben werden, das function entspricht.

>>> def f(x):
...    a = x
...    # ...Tolle Verarbeitung
...    # ...
...    return a
>>> list(map(f, [1,2,3,4,5,6]))
[43248956, 613134354, 6435432, 543575356, 45457623, 243543566]

Funktion, die mehrere Argumente akzeptiert

Sie können auch ** eine Funktion angeben, die mehrere Argumente ** als erstes Argument der Karte akzeptiert. In diesem Fall erhöht sich ** die an die Karte übergebene Iteration **.

? map(Funktion mit N Argumenten, iterable1, iterable2, ..., iterableN)

Zum Beispiel über die folgenden Funktionen, Liste

def f(first, second, third):
   ...

iterable1 = [100, 200, 300, 400]
iterable2 = ["a", "b", "c", "d"]
iterable3 = ["A", "B", "C", "D"]

Die folgende Tabelle zeigt die Aufrufe bei Verwendung der Kartenfunktion wie unten gezeigt.

map(f, iterable1, iterable2, iterable3)
Bearbeitungsauftrag iterable1 iterable2 iterable3 Aufruf zur Funktion f
0 100 "a" "A" f(100, "a", "A")
1 200 "b" "B" f(200, "b", "B")
2 300 "c" "C" f(300, "c", "C")
3 400 "d" "D" f(400, "d", "D")

Da eine beliebige Anzahl von Iterables empfangen wird, sind das zweite und die nachfolgenden Argumente von ** map Argumente mit variabler Länge **. Daher lautet die korrekte Beschreibung wie folgt.

? map(function, *iterable)

Beispiele für die tatsächliche Verwendung sind die Bedienermodule "add" und "mul".

add ist eine Funktion von" + ".

>>> add(2, 3)
5

mul ist eine Funktion von" * ".

>>> mul(4, 5)
20

Da mul eine Funktion ist, die ** zwei Argumente ** empfängt, bereiten Sie bei Verwendung der Map-Funktion zwei ** Iterables ** vor.

>>> from operator import mul
>>> list(map(mul, [1,2,3,4,5], [5,4,3,2,1]))
[5, 8, 9, 8, 5]

Das innere Produkt kann auch klar beschrieben werden.

>>> sum(map(mul, [1,2,3,4,5], [5,4,3,2,1]))
35

Nicht nur Funktionen

Nicht nur ** Funktionen können als erstes Argument übergeben werden **. ** Jedes aufrufbare Objekt ** ist in Ordnung. ** Aufrufbare Objekte sind solche, die mit "Klammern ()" aufgerufen werden können **.

? map(callable, *iterable)

Ein weiteres typisches Beispiel für eine Funktion ist ** Klasse **. Da die definierte ** Klasse selbst auch ein aufrufbares Objekt ** ist, kann sie als erstes Argument der Karte angegeben werden.

class Man:
    def __init__(self, name):
        self.name = name

    def __repr__(self):
        return f"Man('{self.name}')"

print(*map(Man, ["John", "Hideo", "Mitchell", "Chatarai"]))
# Man('John') Man('Hideo') Man('Mitchell') Man('Chatarai')

Wenn Sie mehrere Argumente im Konstruktor erhalten möchten, können Sie natürlich die Iterable für diesen Betrag angeben.

Dies ist abgeschlossen.

Zusammenfassung

Die Definition der Kartenfunktion lautet wie folgt.

map(callable, *iterable)

Das erste Argument ist ** ein aufrufbares Objekt (Funktion oder Klasse) mit einem oder mehreren Argumenten **

Geben Sie nach dem zweiten Argument ** iterierbare Objekte (Objekte, die Iteratoren wie list sein können) für die Anzahl der Argumente an, die für den Aufruf des ersten Arguments erforderlich sind **.

Recommended Posts

[Python] Richtige Verwendung der Karte
[Python] Richtige Verwendung von Join
[Python] Richtige Verwendung der if-Anweisung
Verwendung von Python-Einheimischen ()
Beispiel für die Verwendung von Python Pickle
Grundlegende Verwendung von Python-F-String
Python-Grundlagen ①
Grundlagen von Python ①
Kopie von Python
Nicht logische Operatorverwendung von oder in Python
Einführung von Python
Vergleichen Sie die Geschwindigkeit von Python Append und Map
[Python] Klassentyp und Verwendung des datetime-Moduls
[Einführung in Python] Grundlegende Verwendung von Lambda-Ausdrücken
[Python] Operation der Aufzählung
Vereinheitlichung der Python-Umgebung
Kopie der Python-Einstellungen
Grundlagen der Python-Scraping-Grundlagen
Zusammenfassung der Verwendung von pyenv
Grundlegende Verwendung von Flask-Classy
[Python] Verhalten von Argmax
Grundlegende Verwendung von Jinja2
Ruby, Python und Map
der Zen von Python
Verwendungshinweise für Python Decorator
Grundlegende Verwendung von SQL Alchemy
Installieren von Python 3.3 rc1
# 4 [Python] Grundlagen der Funktionen
Grundkenntnisse in Python
Nüchterne Trivia von Python3
Zusammenfassung der Python-Argumente
Grundlagen von Python: Ausgabe
Installation von matplotlib (Python 3.3.2)
Anwendung von Python 3 vars
Verschiedene Verarbeitung von Python
Python - Erläuterung und Zusammenfassung der Verwendung der 24 wichtigsten Pakete
[Einführung in Python] Grundlegende Verwendung der Bibliothek matplotlib
Super grundlegende Verwendung von Pytest
Auf dem Weg zum Ruhestand von Python2
Zusammenfassung der Python-Dateivorgänge
Zusammenfassung der Python3-Listenoperationen
Verwenden mehrerer Versionen von Python unter Mac OS X (2) Verwendung
Python - Schneller Start der Protokollierung
Empfehlung der binpacking Bibliothek von Python
Grundlegende Verwendung der PySimple-Benutzeroberfläche
[Python] Wert des Funktionsobjekts (?)
Hinweise zur Verwendung des Python-Standards unittest
Erstellen einer lokalen Python-Entwicklungsumgebung Teil 2 (pyenv-virtualenv, Pip-Nutzung)
python * args, ** kwargs Verwendungshinweise
Automatisches Update des Python-Moduls
Python --Überprüfen Sie den Wertetyp
[Python] Der Ursprung des Namens der Python-Funktion
Statische Analyse von Python-Programmen
Über verschiedene Codierungen von Python 3
Objektäquivalenzbeurteilung in Python
Bequeme Nutzungsübersicht von Flask
Einführung in Aktivitäten mit Python
Python> Umgang mit 2D-Arrays