2017-12-30 17 views
0

Hier ist die gesamte Funktion:Was bedeutet -h in Lambda (h, t): (-h, t)?

def dailyTemperatures(temperatures): 
    queue = [] 
    for p in sorted(temperatures, key=lambda (h, t): (-h, t)): 
     print (p[1]) 
     queue.insert(p[1], p) 
    return queue 

Eingang:

[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]] 

Ausgang:

[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]] 

Ich weiß, dass Lambda ein Konstruktor ist, die eine anonyme Funktion erstellt. In dieser anonymen Funktion werden h und t als Parameter übergeben. Was passiert mit h, wenn es wird?

+9

Das gleiche passiert normalerweise, wenn Sie ein negatives Vorzeichen auf etwas anwenden. – BrenBarn

+0

Also in diesem Fall, wenn wir das erste Element in der Eingabe nehmen: '[7,0]' wird es [-7,0]? – Suji

+0

Ja, tut es ... – BrenBarn

Antwort

3

lambda (h, t): (-h, t) verwendet Tuple-Parameter-Entpacken, die nur in Python2 verfügbar ist. Es ist eine pythonische Alternative zu lambda x:(-x[0], x[-1]). Das negative Vorzeichen funktioniert wie erwartet mit jedem Wert, wenn es mit einem negativen Wert multipliziert wird, d. H. Der resultierende Wert ist der absolute Wert, der über die "Zahlenlinie" reflektiert wird, wodurch der ursprüngliche Wert negiert wird. Das Entpacken nimmt den ersten und zweiten Wert der an die Funktion übergebenen Liste und wendet das negative Vorzeichen auf den ersten an.

+1

Um dies in den Kontext zu setzen, ist dieses Lambda ein Schlüssel für die Funktion 'sorted()', die bewirkt, dass die Tupel in der Liste in absteigender Reihenfolge nach ihrem ersten Element sortiert werden. dann, wo es mehr als ein Tupel mit gleichen ersten Elementen gibt, in aufsteigender Reihenfolge durch das zweite Element. – kindall

0

Wenn Sie eine Lambda-Funktion als key angeben, wird in diesem Fall ein Tupel, das ein Element der Liste ist, an die Lambda-Funktion gesendet.

key=lambda (h, t): (-h, t) 

die Regel in dem Lambda-Ausdruck wählen wir eine vlue aus dem Tupel als Schlüssel zu vergleichen, aber der Code zeigte Sie oben gerade den ersten Wert in dem Tupel, negiert und bleiben das Tupel selbst als Schlüssel .