python-max-Funktion mithilfe von 'key' und lambda-Ausdruck
Ich komme aus OOP-hintergrund und versuchen zu lernen, python.
Ich bin mit der max
Funktion verwendet einen lambda-Ausdruck zur Rückgabe der Instanz vom Typ Player
mit einer maximalen totalScore
unter der Liste players
.
def winner():
w = max(players, key=lambda p: p.totalScore)
Die Funktion korrekt zurückgegeben Instanz vom Typ Player
mit einer maximalen totalScore
.
Ich bin verwirrt über die folgenden drei Dinge:
- Wie funktioniert das
max
Funktion arbeiten? Was sind die Argumente, die es nimmt? Ich schaute auf die Dokumentation, aber konnte nicht verstehen. - Was ist die Verwendung des Schlüsselworts
key
im max-Funktion? Ich weiß, es ist auch im Kontext vonsort
Funktion - Bedeutung der lambda-Ausdruck? Wie Sie zu Lesen? Wie funktionieren Sie?
Diese sind alle sehr noobish konzeptionelle Fragen, aber hilft mir zu verstehen die Sprache. Würde es helfen, wenn Sie ihm geben könnte Beispiele zu erklären.
Dank
Welche Python version?
Haben Sie konsultiert, der Dokumentation?
python 2.7.5
Ich habe in der Dokumentation für die max-Funktion. Nicht wirklich verstanden.
Diese Seite ist jetzt eigentlich die top-Ergebnisse auf Google für
Haben Sie konsultiert, der Dokumentation?
python 2.7.5
Ich habe in der Dokumentation für die max-Funktion. Nicht wirklich verstanden.
Diese Seite ist jetzt eigentlich die top-Ergebnisse auf Google für
python max lambda
und vielleicht kann tatsächlich mehr hilfreich für neue Benutzer.InformationsquelleAutor Vijay | 2013-08-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
lambda
ist eine anonyme Funktion, es ist äquivalent zu:Nun
max
wird:Aber als
def
Aussagen zusammengesetzte Aussagen, die Sie kann nicht verwendet werden, wo ein Ausdruck erforderlich ist, das ist, warum manchmallambda
's verwendet.Beachten Sie, dass
lambda
ist äquivalent zu dem, was Sie würden in eine return-Anweisung einerdef
. So können Sie nicht verwenden, Anweisungen innerhalb eineslambda
nur Ausdrücke erlaubt sind.Was bedeutet
max
tun?So, es gibt einfach das Objekt, das die größte.
Wie funktioniert
key
Arbeit?Standardmäßig in Python 2
key
vergleicht Elemente basierend auf einem Regeln basierend auf dem Typ der Objekte (zum Beispiel ein string ist immer größer als eine Ganzzahl).Zum ändern des Objekts vor dem Vergleich, oder zu vergleichen, basierend auf einem bestimmten Attribut/index, Sie haben zu verwenden, die
key
argument.Beispiel 1:
Ein einfaches Beispiel: angenommen, Sie haben eine Liste von zahlen in string-form, aber Sie wollen, vergleichen Sie diese Einzelteile durch Ihren ganzzahligen Wert.
Hier
max
vergleicht die Elemente mit Ihren ursprünglichen Werten (strings werden lexikographisch verglichen, so dass Sie bekommen würde'2'
Ausgabe) :Vergleichen die Elemente durch Ihre integer-Wert verwenden
key
mit einem einfachenlambda
:Beispiel 2: Anwenden
max
zu einer Liste von Listen.Standardmäßig
max
vergleichen Sie die Elemente vom ersten index. Wenn der erste index ist der gleiche, dann werde es vergleichen, der zweite index. Wie in meinem Beispiel, alle Elemente haben einen eindeutigen ersten index, also würden Sie bekommen diese als Antwort:Was aber, wenn Sie wollten, vergleichen Sie jede Position durch den Wert bei index 1? Ganz einfach:
lambda
:Vergleich der Elemente in einem wiederholenden enthält Objekte verschiedener Art:
Liste mit mixed Artikel:
In Python 2 ist es möglich, den Vergleich von Elementen aus zwei verschiedenen Arten:
Aber in Python 3 können Sie nicht mehr machen:
Aber das funktioniert, wie wir vergleichen, integer version jedes Objekts:
lengths = map(lambda word: len(word), words)
wowords=['It', 'is', 'raining', 'cats', 'and', 'dogs']
ich sehen, dass der lambda-Ausdruck iteriert jedes Wort in der Liste. Tut er dies immer?Die Iteration erfolgt durch
max
nichtlambda
(key
arg ist optional), und während der iteration jedes Element an die Funktion übergeben wird angegeben inkey
und der zurückgegebene Wert wird dann für den Vergleich verwendet.Nur für die Leute, die hierher kamen, durch googeln "max-Taste parameter".
max(lis, key=lambda x:int(x))
kann vereinfacht werden, damax(lis, key=int)
. Python hat eine eingebaute Funktion, die int(). Ebenso können Sie auch jede andere integrierte Funktionen wie einekey
argument. Zum Beispiel können Sie die längste Zeichenfolge vonlis=['a', 'aa', 'aaa']
durchmax(lis, key=len)
Wir können jede Funktion, die als argument nicht nur vordefinierte Funktionen, die einzige Bedingung ist, dass die Funktion sollte akzeptieren, die Elemente, die an es übergeben, die von
max
,min
,sorted
etc richtig. Plus habe ich erwähntmax(lis, key=int)
Recht am Ende. 🙂InformationsquelleAutor Ashwini Chaudhary
Stark vereinfachte version von
max
:Bezüglich lambda:
InformationsquelleAutor Markus Unterwaditzer
Sieht es für das "größte" Element in einem durchsuchbar. Ich nehme an, dass Sie
kann nachschlagen, was das ist, aber wenn nicht, ist es etwas, was Sie können Schleife über,
d.h. einer Liste oder einem string.
Key
ist eine lambda-Funktion, die Ihnen sagen wirdmax
welche Objekte in der iterierbar sind größer als andere. Wenn Sie sagen, waren Sortierung Objekt, das Sie selbst erstellt haben, und nicht etwas offensichtlich, wie ganze zahlen.Das ist sozusagen eine größere Frage. In einfachen Worten, ein lambda-Ausdruck ist eine Funktion, die Sie können vorbei um, und haben anderen code-Stücken verwenden. Nehmen Sie dies zum Beispiel:
Diese dauert zwei Objekte
a
undb
wird, und eine Funktionf
.Es fordert
f()
auf jedes Objekt, fügt Sie dann zusammen. Schauen Sie sich deshalb diesen Aufruf:sum()
nimmt2
sind, und fordert den lambda-Ausdruck auf. Sof(a)
wird2 * 2
, Sie wird 4. Dann macht dies fürb
, und fügt die zwei zusammen.In nicht so einfachen Bedingungen, Lambda-Ausdrücke kommen aus dem lambda-Kalkül, was ist die Idee, eine Funktion, die zurückgibt, eine Funktion, eine sehr Coole Mathe-Konzept für den Ausdruck der Berechnung. Man kann darüber Lesen, dass hier, und dann tatsächlich verstehen es hier.
Es ist wohl besser zu Lesen über diese ein wenig mehr, als lambdas kann verwirrend sein, und es ist nicht sofort offensichtlich, wie nützlich Sie sind. Überprüfen Sie hier.
InformationsquelleAutor charmlessCoin
Entsprechend der Dokumentation:
Was dies sagt, ist, dass in Ihrem Fall, stellen Sie eine Liste, in diesem Fall
players
. Dann diemax
Funktion iteriert über alle Elemente in der Liste und Vergleich Sie mit einander, um eine "maximale".Als Sie sich vorstellen können, mit einem komplexen Objekt, wie ein
player
Bestimmung, Ihren Wert für den Vergleich ist schwierig, also sind Sie angesichts derkey
argument, um zu bestimmen, wie diemax
Funktion entscheidet der Wert der einzelnenplayer
. In diesem Fall, verwenden Sie eine lambda-Funktion zu sagen "für jedenp
implayers
bekommenp.totalscore
und verwenden, als seinen Wert für Vergleich".InformationsquelleAutor Inbar Rose
max
Funktion wird verwendet, um das maximum aus eineriterable
.Iteratoren können Listen, Tupel, dict-Objekte, etc. Oder sogar eigene Objekte, wie in dem Beispiel, das Sie zur Verfügung gestellt.
So, die
key=func
im Grunde erlaubt uns, um ein optionales argument übergebenkey
zu der Funktion, auf deren Grundlage die gegebenen iterator/Argumente sind sortiert & das maximum wird zurückgegeben.lambda
ist ein python-Schlüsselwort, das wirkt wie eine pseudo-Funktion. Also, wenn Sie übergebenplayer
Objekt, um es, wird es wiederplayer.totalScore
. So, die iterierbar übergegangen Funktionmax
Sortieren nach derkey
totalScore derplayer
Objekte gegeben, es & zurückplayer
wer hat eine maximaletotalScore
.Wenn keine
key
argument angegeben wird, das maximum wird zurückgegeben gemäß der Standard-Python-Ordnungen.Beispiele -
InformationsquelleAutor shad0w_wa1k3r
max
ist eine eingebaute Funktion nimmt das erste argument einiterable
(wie Liste oder Tupel)keyword argument
key
hat der default-WertNone
aber es akzeptieren-Funktion zu bewerten, betrachten Sie es als wrapper, der wertet iterierbar basierend auf der FunktionBeachten Sie in diesem Beispiel Wörterbuch:
Ex:
Wie Sie sehen können, wenn Sie nur passieren die iterierbar ohne kwarg(eine Funktion, die zu
key
) es ist wieder maximale Wert key(alphabetisch)Ex.
Statt finden, max-Wert-Taste alphabetisch müssen Sie möglicherweise zu finden, max mit der Länge des Schlüssels:
in diesem Beispiel mit lambda-Funktion ist wieder die Länge der Schlüssel, die Durchlaufen werden daher bei der Auswertung Werte anstatt zu überlegen, alphabetisch, es wird verfolgen von max Länge der Taste und zurück-Taste, die hat max Länge
Ex.
in diesem Beispiel mit lambda-Funktion kehrt mit dem Wert der entsprechenden dictionary-Taste, die maximale Wert
InformationsquelleAutor Gahan