2016-09-30 14 views
2

私はPythonのチュートリアルのイントロを行っていますが、コードを理解しています。これはチュートリアルのセクション4.7.5からのものです。Python初心者 - ラムダ関数を使ってタプルを並べ替える

pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] 
pairs.sort(key=lambda pair: pair[1]) 
pairs 

コードのこのビットが1行目でそう

[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')] 

を返し、それが異なるタプルのリストとペアを定義します。私はそれを得る。 2行目は私が完全に捨てられているところで、何が起きているのかを理解しようとするとかなり邪魔になりました。

私はsort()が変数ペアに組み込み関数を適用していることがわかりました。おそらく、私が与えている指示に従ってそれをソートしています。

sort()関数はキーを必要とし、keyは関数を使用して定義する必要があります。したがって、lambdaを使用します。私はこれがすべて正しいと思うが、私はここにいるかもしれない。

ラムダは、コロンの左側に新しいパラメータ "pair"を定義し、右側にラムダ関数の戻り値を定義する計算を定義します。

それは私が捨て去るところです。 「ペア[1]」は何をしますか?コロンの左側の "ペア"に及ぼす影響は何ですか?

どのような価値が返されますか?私はこれをコーディングする以外にも何らかの価値を返すようには思えません。

私はそれが何とか特定のタプルを指し示し、それを再配置することに基づいて並べ替えることを推測していますが、その背後にあるロジックについてはわかりません。

誰でも私のためにこれを説明できますか?ありがとうございました。

+0

'lambda 'では、ソートする必要がある値を参照します。 –

+0

'key = lambda pair:pair [1]'を 'key(pairs [0])'と呼び、これを 'key(pairs [1])'と比較してみたら助けになるでしょうか?最終結果が各タプルの2番目の要素でアルファベット順にソートされているとすればどうでしょうか? –

答えて

0

ラムダ関数はタプルを入力として取り、インデックス1の要素を返します(したがって、最初の要素はインデックスが0なので、2番目の要素にはインデックスがあります)。 です。ソートでは、各タプルの2番目の要素(英語の単語)のみが考慮されます。そのため、出力は2番目の要素でアルファベット順にソートされます。'four'>'one'>'three'>'two'

+0

ありがとうございます。私は何時間もこれを見つめている。私はそれが "ペア"変数の位置を指していると思っていました(私の心は一度それについてしまって、戻ってくることはなく、タプルの位置ではありませんでした。 –

0

lambdaは、式のみを使用した単純化された関数です。

任意ラムダそうlambda pair: pair[1]になる、発現前returnに添加することにより、関数のように書くことができる:

def lambda_function(pair): return pair[1] 

ので、ここlist.sort()呼び出しでラムダは、各シーケンスの要素を返しますそれが渡されます(Pythonインデックスは0から始まります)。

あなたが言う、変数にラムダを割り当てることによって、これが見えるようにすることができ、keylist.sort()方法は、要素をソートする(リストの各要素に対して1回)これらの呼び出しの出力を使用

>>> pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')] 
>>> key = lambda pair: pair[1] 
>>> key(pairs[0]) 
'one' 
>>> key(pairs[1]) 
'two' 

。したがって、4つの要素の場合、関数は'one','two''three'、および'four'を返し、4つのタプルは純粋にこれら4つの文字列の辞書順(アルファベット順)でソートされます。その注文は'four''one''three''two'となります。これは最終ソートリストに反映されています。

この形式の代替キーによるソートは、一般的にSchwartzian transformと呼ばれ、Randal L. Schwartzの後にPerlでこの技術を普及させた後です。

1

時々lambdaで作業を開始すると、関数を明示的に書き出す方が簡単です。戻り値に基づいてアイテムを

def sort_key(pair): 
    int_value, string_value = pair 
    return string_value 

list.sortため受注:それがさらに明白にするために、我々はより冗長になりたい場合は、私たちはペアを解凍することができます

def sort_key(pair): 
    return pair[1] 

:あなたのラムダ関数は同等ですkey関数(存在する場合)の現在のところ、文字列値でタプルをソートしていることがわかります。文字列は辞書順に並べ替えるので、"four""one"(アルファベット順)より前に来ます。

関連する問題