2017-12-30 32 views
0

は全体の機能である:ラムダ(h、t)の-hは何ですか:(-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 

は、入力:

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

出力:

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

私は、ラムダは、無名関数を作成し、コンストラクタであることを知っています。この無名関数では、htがパラメータとして渡されます。 -hになるとhはどうなりますか?

+9

何かにマイナス記号を付けると、通常同じことが起こります。 – BrenBarn

+0

この場合、入力の最初の項目を取ると、 '[7,0]'は[-7,0]になりますか? – Suji

+0

はい、そうです... – BrenBarn

答えて

3

lambda (h, t): (-h, t)は、タプルパラメータ展開を利用しています。これは、Python2でのみ利用できます。これはlambda x:(-x[0], x[-1])のPythonicの代替品です。負の符号は、負の値で乗算されたときの任意の値で期待されるように機能しています。つまり、結果の値は「数値ライン」に反映された絶対値なので、元の値は無効になります。アンパックは、関数に渡されるリストの最初と2番目の値をとり、負の符号を最初の値に適用します。

+1

これをさらに文脈に入れるために、このlambdaは 'sorted()'関数のキーです。これは、リスト内のタプルを引き起こし、リストは最初の要素によって降順にソートされ、最初の要素が等しいタプルが2つ以上ある場合は、2番目の要素の昇順に並べ替えます。 – kindall

0

ラムダ関数をkeyと指定すると、リストの要素であるタプルがこの場合はラムダ関数に送信されます。

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

は通常、ラムダ式では、我々は、比較するためのキーとしてタプルからvlueを選ぶが、あなただけの上に示したコードは、タプルの最初の値を否定し、キーとしてタプル自体残ります。

関連する問題