今回はmap関数について説明していきます。 python にすでに実装されているビルトイン関数の中で、高度なものに相当しますが、理解すればどなたでも簡単に扱うことができます。
以前紹介したlambda式も、高度な関数に該当します。以下にリンクを貼ってありますので気になる方はこちらをご覧ください。
map関数とは
業務等でリスト型のデータ処理をする際、最も一般的なものとして「格納されている個々のデータに対して同じ操作をする」ことが挙げられます。つまり、同じ動作を複数回実施する訳なので、for文を使用すれば上記の操作が実現可能です。
以下に例を示します。
data=['apple', 'banana', 'chocolate']
update=[]
for x in data:
update.append(x+'s')
update
//出力→['apples', 'bananas', 'chocolates']
前述した通り、for文でも表現可能ですが、シンプルな操作の割にはコードが長くなってしまうことが分かるかと思います。
実際はこのような操作は非常に多く使用する機会があるため、毎回for文を使用していてはコードが煩雑になってしまします。そこで、pythonは上記の操作を簡略できるmap関数というものを用意しています。
map関数とは、「第一引数にて指定された関数を、その後に指定されたシーケンスの個々の要素に適用する」という機能を備えた関数となります。map関数の戻り値は、個々の要素を関数に適用した値をを要素とするシーケンスとなります。
構文を以下に示します。
map(function//関数, list//要素 )
「list」内の個々の要素に対して関数「funtion」を適用してmapオブジェクトを出力するものになります。mapオブジェクトとは、イテレータからなっており、要素を反復して取り出せるものです。
map関数をprintにて出力したものを以下に示します。
<map at 0x7fac9800ca00>
上記の通り、出力させても一見データが生成されたのかわかりませんが、リスト化してあげることで値を見ることができます。(「コード実践例」に記載してます)
map関数のメリット
ここでmap関数のメリットについて説明します。
ビルトイン関数とは前述した通り、予めpythonに導入されている関数になります。つまり、「どのようなプログラムに対しても使用でき、常にどのようなプログラムに対しても安定的な動作をする」というメリットがあります。
2. 実行速度が速い
for文を使用することでも同様の操作を実現できますが、ループ処理となることから、データ量が多くなるにつれて実行速度が低下します。しかし、map関数においてはループ部をいてとならないため、データ量が多くなったとしても実行速度の低下がfor文に比べて少なく済みます。
コンピュータへの負荷が少ないプログラムに対しては、実行速度においてfor文、map関数の優劣は特に感じないかと思いますが、負荷がそれなりにかかるプログラムに対しては、map関数を使用することがオススメです。
コード実践例
「マップ関数とは」で記載したfor文を用いたコードを、map関数に置き換えてみます。
data=['apple', 'banana', 'chocolate']
def update(x): return x+'s'
list(map(update,data))
//出力→['apples', 'bananas', 'chocolates']
for文を使うよりも、コードが簡潔に見えますね。map関数はリストに対して関数を適用するときに便利と覚えておきましょう。
また、map関数に類似したものとして、リスト内包表記がありますので、後ほどこちらも記事にして、map関数との対比をしたいと思います。
まとめ
今回はmap関数について纏めました。map関数は python だけでなく、java等でも活用できるため、覚えておいて損はないでしょう。まずは、リストに対して関数を適用するためのツールとして導入してみてください。
1. ビルトイン関数であることの優位性がある