面白いデータを探して

適当に書く。間違えていたら教えてください。

pythonのlambdaの扱いについてまとめる

今だに挙動がよくわからなくなることがあるので、pythonのlambdaの扱いについてまとめて行く。

lambdaとは

関数を定義するために使う。
例えば

def inc(x):
    return x+1

print(inc(1))

# 2

というプログラムはlambdaを使うと

print((lambda x:x+1)(1))

# 2

と書くことができる。

inc = lambda x:x+1
print(inc(1))

# 2

と書くこともできる。

文法

lambdaの基本的な文法は下

lambda 引数 : 返り値

使えると何が嬉しい?

lambdaが使えると、ちょっとした関数を書きやすくなる。
mapとかsortとか、listなどの要素にちょっとした細工したいなーってときに、わざわざ名前付きの関数を1つ定義するのはめんどい。
なので、lambdaを使ってさらっと処理しましょう。

具体的に使用例

list内の要素を全て2倍する

a = list(range(10))

# 関数を定義して書く
def double(x):
    return x*2
b = list(map(double, a))

# list内包表記で書く
c = [x*2 for x in a]

# lambdaで書く
d = list(map(lambda x:x*2, a))

入れ子のlistの各要素をかけて返す

a = [[1, 2], [3, 4], [5, 6]]

# 関数を定義して各
def mul(x):
    return x[0]*x[1]
b = list(map(mul, a))

# リスト内包表記で書く
c = [x[0]*x[1] for x in a]

# lambda式で書く
d = list(map(lambda x:x[0]*x[1], a))

入れ子のデータを整列する

# aをそれぞれのリストの先頭の要素の順で整列したい。
a = [[2, 0], [3, 1], [1, 2]]

# sortedのkeyにlambda関数を指定
b = sorted(a, key=lambda x:x[0])

# 関数定義版
def func(x):
    return x[0]
c = sorted(a, key=func)

辞書データをvalueの順で整列する。

a = {"ken":1, "yuji":4, "taro":2, "takeshi":3}

# 整列
b = sorted(a, key=lambda x:a[x])

print("a:", a)
print("b:", b)

# a: {'ken': 1, 'yuji': 4, 'taro': 2, 'takeshi': 3}
# b: ['ken', 'taro', 'takeshi', 'yuji']

最後に

何か面白そうな使い方があったら教えてください。
見つけたら書きます。