アットウィキロゴ
 

lambda式について

  • 2014/04/14(月)めも
  • このページ参照
  • lambda式=無名関数 例えば
    func = lambda x:x**2
    func(5) #25
    func(6) #36
    
  • これはdef func(x): return x**2 と定義するのと同じ
    つまり、lambda式は入力値xをコロンの次に定義する式に代入して、結果を返す。
    上の例だと、無名関数を使うメリットはないが、他の関数と組み合わせるときに便利。

例1)sorted()
lambda関数の内容に入る前に補足
sort()とsorted()について

  • sort()関数は、返り値を出さずに、リストの本体自体を変更する。
  • sort()関数はソートの対象がリストであるのに対し、sorted()関数は対象がイテレータとなる 実際のpythonでの例はこんな感じで
    >>> x = [1,6,3,8,4]
    >>> y = [1,6,3,8,4]
    >>> y.sort()
    >>> y
    [1, 3, 4, 6, 8]
    >>> sorted(x)
    [1, 3, 4, 6, 8]
    

つまり、sort()はy自体の順番を変更しているけれど、sorted()はxの順番を変更して出力している。
ここで、sorted()を使うとリストの中がタプルの場合、ソートしたい要素を指定できる。
例えば、

L1 = [(7,2),(3,4),(5,5),(10,3)]
L2 = sorted(L1,key=lambda x:x[1])
print L2 #[(7,2),(10,3),(3,4),(5,5)]

ここで、L1というリスト型オブジェクトをタプルの2番目の要素でソートすることができている。
これは、リスト型でなくてもイテレータならば同じで、辞書型についても考えてみる。

※イテレータ:ざっくり言うと、リストやタプル、辞書のように次の要素が決まっていて次のデータを参照できる。こんな感じ?

例えば

dict = {'A':500, 'B':200, 'C':300, 'D':100, 'E':400}
for k, v in sorted(dict.items(), key=lambda x:x[1]):
   print(k, v)

結果

D 100
B 200
C 300
E 400
A 500

また、ソートを降順にするにはreverse=Trueを付ければいい

for k, v in sorted(dict.items(), key=lambda x:x[1], reverse=True):
   print(k, v)

結果

A 500
E 400
C 300
B 200
D 100
最終更新:2014年04月14日 14:19