Python、機械学習

【Python】map関数でリストの中身を全て変換する。lambda式もあり。

Kaggleで写経をしていると、map関数を使っている場面によく遭遇します。map関数ってどうやって使えるのでしょうか?

map(関数, リスト)で、リストに関数を適用できる

map関数は至って簡単です。map(関数, リスト)として、リストに関数を一括適用します。

例として、2019年における職場のメンバーの年齢をリストにします。

member_age_2019 = [50, 41, 36, 31, 28]

 

では、1年後の2020年における年齢を表現するにはどうすればいいでしょうか。まずは、年齢が1つ増える関数を定義します。

def next_year(x):
    return x+1

 

そして、map関数を使います。map(関数, リスト)の形です。

member_age_2020 = map(next_year, member_age_2019)
member_age_2020

<map at 0x1160383c8>

map関数は、リストではなくてイテレータという形式のものを返します。イテレータというのは、まあリストのようなもんですが、そのままでは中身が見えません。

よって、イテレータをリストに変換するlist()で囲ってやります。

member_age_2020 = map(next_year, member_age_2019)
list(member_age_2020)

[51, 42, 37, 32, 29]

無事に、全メンバーの年齢が1つ増えました。とても簡単です。

lambda式を使えば、わざわざ関数を定義しなくて済む

lambda(ラムダ)式を使えば、わざわざ関数を定義しなくて済むようになります。lambda式とは、「lambda x:○○」という形のものです。

年齢が1つ増えるようにしたいのならば、このように書きます。

lambda x:x+1

 

めっちゃシンプルです。「lambda x:x+1」をひとかたまりの関数としてmap関数に入れてみましょう。

member_age_2020 = map(lambda x:x+1, member_age_2019)
list(member_age_2020)

[51, 42, 37, 32, 29]

defでわざわざ関数を定義せずとも、年齢を1つ増やすことができました。

pandasでもmap関数が使える

map関数は、リストだけでなくpandasにも使えます。詳しくはこちらの記事を参照ください。map関数によく似たapply関数についても書いています。