Python PR

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関数についても書いています。

Pandasでmapメソッドやapplyメソッドを使う。lambda式もあり。こちらの記事では、リストにmap関数を適用し、リストの中身を一括で変換する方法について言及しました。 https://punhundo...