今回は map 関数という関数について詳しく解説していきます。
map 関数は高階関数といい、目にすることも多いでしょうから map 関数の理解に困っているという人の手助けになれば幸いです。
高階関数とは
map 関数の説明の前に高階関数とは何かについて簡単に解説いたします。
高階関数とは関数を引数に取る関数の事、もしくは関数を戻り値として返却する関数の事です。
例えば、①②③と3つの処理を実施する関数があったとして、②だけ微妙に処理が異なるものが他にもいくつかほしいような状況があったとします。
そんな中②の処理をちょっと変えただけの関数をいくつも用意するのはあほらしいので②の処理を関数として引数に取る①と③の処理を実施する関数を用意し②だけ書かれた関数をいくつか用意して使うみたいなやり方をするときに高階関数は用いられます。
map関数とは
map関数とはシーケンス型のデータに対して、引数に指定した関数の処理を施してくれる関数の事です。
シーケンス型のデータとは例えばリストやタプルなどがあります。
例えば、リストの値をすべて2倍にしたいという時、2倍にしてデータを返すという処理を記載した関数を引数に取りmap関数を呼び出せばリストの値をすべて2倍にしてくれます。
map 関数の使い方

次に map 関数の使い方についてお伝えします。
map 関数を使う場合はまず、シーケンスデータに対し処理したいコードが書かれた関数を用意します。
そしたらその関数名を使って map 関数の引数にシーケンスデータと一緒に引き渡します。
実際の使い方については以下のサンプルコードをご確認ください。
1 2 3 4 5 6 7 8 9 10 11 |
#値を2倍にする関数 def doubleNum(num1): return 2 * num1 #リストを定義 listNum = [2 , 4 , 7 , "test"] #2倍にしたリストデータを受け取り格納 doubleList = list(map(doubleNum , listNum)) print(doubleList) |
map関数はそのままリストを返すのではなく、mapオブジェクトというイテレータを返します。
イテレータとは反復可能オブジェクトといいデータの流れを表現しているオブジェクトのことです。例えば range 関数で得られたオブジェクトなんかがそれにあたります。
今回は map オブジェクトが返ってくるのでリストの値がそれぞれ倍にする処理が施さ多状態のものが得られると思っていただけるといいと思います。
今回は再度リストとしてデータが欲しいのでめ、map関数によって帰ってきたデータ群を”list()”関数で再度リスト化しています。
ラムダ式を使った map 関数
それでは最後にラムダ式を利用してmap関数を使ってみます。
上記の内容でラムダ式を使ってみます。
因みにラムダ式は以下のような構造になっております。

詳しく知りたいという方は以下の記事をご参照ください。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
listNum = [2 , 4 , 7 , "test"] ■■■■■通常の関数■■■■■ #足し算の結果を返す def doubleNum(num1): return num1 * 2 doubleList = list(map(doubleNum , listNum)) print(doubleList) ■■■■■ラムダ式の関数■■■■■ lambdalist = list(map(lambda num : num * 2 , listNum)) print(lambdalist) |
上の内容が最初に記載したものです。下の部分がラムダ式を利用した内容です。だいぶコンパクトにまとまっていますね。前回はラムダ式の内容を一度別の変数に格納しておりましたが、map関数にそのままラムダ式を引数として渡しても問題なく動きます。ただ、読らさも考慮すると一度変数に格納してからの方が良いかもしれませんので、その辺りはケースバイケースで実装しましょう。
今回はここまでです。
お疲れ様でした。
コメント