
【Python】Map関数:リストの各要素に関数を実行
こんにちは~。本日もPythonでリストに対する処理の方法の一つを学んでみましょう。今回取り上げるのは、Map関数でございます!
「Map!?地図か?😑」
いや、Map関数といっても地図らしきものは出てきません。この関数は、特定の関数を取り込んで、リストの各要素にその関数の処理を実行できるという優れものでございます~。ループを使わないでいいんです。
「うん、今日も何言っているか、分からない😭」
う、そうですか💦。じゃあ、ちょっと、実際にMap関数を使わないで、リストのすべての要素に処理を実行するコードを見てみましょう。
リストの各要素に1を足したいだけだが…
5つの要素で構成されるリストの各要素に、1を足す処理をしたいとします。どんなコードにしましょうか。例えば、次のようなコードで行けるのではないでしょうか。

早速分解して見ましょう!
最初に1を足す関数を宣言
どうやら、一番最初に関数の宣言がありますね。

関数名は、add_oneです。引数はxです。処理内容は、そのxに1を足した値を戻すという、きわめてシンプルなものです。
リストを2つ準備
続いて、リストを2つ準備します。

data1は、1~5までの値を持つリストです。そいて、data2に、data1の各要素に1を足した要素を持つリストを入れることにします。とりあえず、data2には、空のリストを入れておきましょう。
関数を実行して要素を追加
そして、次のループは何をしているのでしょうか。

for文の変数「i」は、今回、カウンタではなく、Data1の各要素、つまり1~5に順に変化します。
次に処理部に注目します。add_one関数を呼び出しており、引数は「i」、すなわち、ループごとに1,2,3,4,5となります。ということで、appendメソッドの引数は、add_one関数の戻り値、2,3,4,5,6となりますね。
Appendメソッドって何でしたたっけ。そう、引数をリストの末尾に追加するメソッドでしたね。であるなら、空であったData2というリストに「2,3,4,5,6」という要素が追加されるんですな。
そして出力したら、こうなります。

やりました!Data1の各要素に、Add_one関数を実行できました。
「これで、いいじゃないですか😑」
まあ、そうおっしゃらず、Map関数を使ってみようじゃないですか。もっとスマートですよ。
Map関数なら、もっとスマートに
では、Map関数を使って同じ処理をやりましょう。Map関数は、特定の関数を取り込んで、リストの各要素にその関数の処理を実行できるのでした。
コードにすると次の通りになります。関数の定義とData1の準備は上記と同様で、そこからMap関数の出番となります。

Map関数の構文
「おや、For文がないぞ🤔」
そうなんです。ループ制御のためのコードを書かなくていいんですね。Map関数の構文は次の通りです。
map(関数, リスト)
正確さには欠けますが、第1引数に、行いたい処理を定義してある関数名を入力します。続いて、第2引数に、処理対象のリスト名を入れます。これだけ。その戻り値をいったんmap_dataという変数に保存しました。
驚き!?戻り値がリストではなかった
「で、戻り値は、関数の処理が完了した後のリストなんでしょう?🙂」
ところが、、、Map関数の戻り値は、リストではなく、Mapオブジェクトなるものです(ここでは扱いません)。したがって、このままではリストとして使えません。
かくなる上は、List関数を使って、得られたMapオブジェクトをリストに転換します。その戻り値をData2に格納します。

そして、Data2を出力すれば、Data1の各要素に1が加えられた値が要素となっているリストが表示されるというわけですね。

「スマートかと思ったら、最後にひと手間必要でしたね~😑」
あ、ええ、確かに😅。でも、各要素に対して関数を実行できるというのは、やはり便利なので、Map関数の活躍の場はあるでしょう。せっかくですから、覚えておきましょう!
ということで、今日は、Map関数で、特定の関数を取り込んで、リストの各要素にその関数の処理を実行しようというお話でした。
では、ビーダゼーン!
※私のやる気アップとブログの品質向上につながりますので、記事が気に入られた方は、「ポチっ」と好きボタンを押してくださったり、フォローいただけますと幸いです🙇。