2017-03-10 23 views
2

lambdaがgroupbyやsort関数で使用されたときの動作を理解しようとしています。たとえば、オブジェクトのリストを取得しました。各オブジェクトにはnameとsurnameという2つの属性があります。私は、ラムダが、この場合に働くんか?そこにある、よくdoesntの仕事をソートし、グループ化の最初の例であることに気づいた何そして、グループ化ソート/グループ化でのLambda関数

groupby(list, lambda x: x.name and x.surname) 
groupby(list, lambda x: (x.name,x.surname)) 

list.sort(key=lambda x: x.name and x.surname) 
list.sort(key=lambda x: (x.name, x.surname)) 

:姓と私は2つのティンズを試してみましたラムダ関数が何をしているかをテストする良い方法ですか?

ありがとうございます!

+2

'x.nameとx.surname'はブール式です。ソートする部分的な順序をどのように反映すると思いますか? –

+1

'xとy'は'(x、y) 'と同じではなく、むしろ' xならばx else y'です。 –

+0

@MichaelFoukarakisはい、それは明白なtbhのようです..私はまだラムダがタプルであるときにうまくいかないことを理解していません。私はgroupbyとソートをパラメーターとどのように扱うかについて少し調べます。ありがとうございました! – dccdany

答えて

1

のは、何の指定されたオブジェクトのlambda x: x.name and x.surnameリターンを見てみましょう:lambda内部の式x.name and x.surnameの評価は、それが「スプリット」の表現によるよということであるためです

print(name_and_surname(People("Bill", "Gates"))) # will print "Gates" 
print(name_and_surname(People("Name", "Surname"))) # will print "Surname" 

class People(object): 
    def __init__(self, name, surname): 
     self.name = name 
     self.surname = surname 

name_and_surname = lambda p: p.name and p.surname 

そして、 andを入力し、すべての単一の式を1つずつ評価し、最初のfalsy値または最後の式の値を返します(例:name_and_surname(People("Name", "Surname")))。

  1. 評価x.nameと値"Name"を取得し、それはtruthy値だ、評価x.surname
  2. それをスキップして、あなたの重要な機能としてlambda x: x.name and x.surnameを使用するときに"Surname"

である、それを返す、実際にあなたlambda x: x.surname

+0

パーフェクト!、ラムダ関数の働きを答える、ありがとう! – dccdany

0

引数は、イテラブル(リスト)内の項目を最初のパラメータとして受け取る呼び出し可能コードを必要とします。呼び出し可能オブジェクトはオブジェクトを返すことが期待されます。このオブジェクトは出力をソートするために使用されます。

sorted([1,2,3,4,5]) 
[1, 2, 3, 4, 5] 

sorted([1,2,3,4,5], key=lambda x: x * -1) 
[5, 4, 3, 2, 1] 

list.sort()についても同様である。

関連する問題