Pythonのmap関数の使い方 配列内の全ての要素に関数処理を適用する
- 公開日:2018/11/15
- 更新日:2018/11/15
- 投稿者:n bit
Pythonのmap関数の基本や使い方について解説。listやtuple、dict等の配列に関数処理を実行したい場合がありますよね。そのような場合に1行の記述で一括処理できてしまう便利な組み込み関数がmap関数です。実行処理後イテレータを返してくれます。
この記事は約 分で読めます。(文字)
map関数とは
map関数はPythonの組み込み関数の1つでリストやタプル、辞書、セット、文字列といった複数の要素を持つ配列オブジェクト内のすべての要素に引数で渡す関数の処理を適用してイテレータを返す関数です。
Note
イテレータ
『イテレータ』は配列内の要素を1つずつ取り出していく状態を記憶しておくことができるオブジェクト
map関数の主な用途
- 配列オブジェクト内のすべての要素に関数処理を適用
例えばリストオブジェクト内の全ての要素の文字列を小文字化したい場合は引数で渡すリストの定義も含めて下記のような2行のコードで記述することができます。
words = ['Python', 'CSS', 'HTML', 'JavaScript']
map(lambda word:word.lower(), words)
ではmap関数について詳しく学習していきましょう。
map関数の使い方
map関数の使い方は実行したい関数処理と、関数の処理を適用したい配列オブジェクトを引数として渡します。
map(関数, 配列オブジェクト)
実際にmap関数を使って様々なオブジェクト内の要素に関する処理を適用してみましょう。
list型(リスト)オブジェクト内の文字列要素をmap関数で小文字化
冒頭でサンプルとして見せたコード『リストオブジェクト内の全ての要素の文字列を小文字化したい』について分解しながら詳しく解説していきます。
わかりやすいように最初はlambda式を利用せず簡易的な関数を作成してmap関数の引数として渡してみましょう。簡易関数とリストをmap関数の引数に渡して返される値をチェックしてみます。
返された値を出力させるためprint関数等に渡してください。
words = ['Python', 'CSS', 'HTML', 'JavaScript']
def text_lower(word):
return word.lower()
x = map(text_lower, words)
for text in x:
print(text)
出力結果
python
css
html
javascript
リストオブジェクト内の要素がすべて小文字化され表示されました。
コードの詳細な解説
1行目はmap関数で処理対象となる配列オブジェクトを定義しているだけです。
words = ['Python', 'CSS', 'HTML', 'JavaScript']
3〜4行目はmap関数で配列オブジェクトに適用する関数を定義しています。引数で受け取った『word』を小文字化してreturnする簡易な独自関数です。
6行目でmap関数に『配列に適用する関数』と『適用対象となる配列』を引数として渡しています。
x = map(text_lower, words)
map関数から返される値はリストオブジェクトではなくイテレータオブジェクトなのでfor文でループさせてprint関数で出力しました。
map関数が出力するのはmapオブジェクト
map関数で返された値をそのままprint関数で出力するとmapオブジェクトが出力されます。
print(x)
print(type(x))
出力結果
<map object at 0x7efeefd0f7f0>
<class 'map'>
mapオブジェクトはイテレータオブジェクトの中の1つですのでnext関数やfor文のループで中身を確認する必要があります。
イテレータについて忘れてしまった方は下記のページから再度学習しておきましょう。詳しくは下記のページをご覧ください。
Pythonのイテラブル(iterable)とイテレータ(iterator)
Pythonには、イテラブル(iterable)とイテレータ(iterator)と言う重要な概念があり、ある一定以上の段階を超えてコードを記述していくには必要な知識。今回は初心者向けにイテレータの理解に必要『iter関数、next関数』とあわせてわかりやすく解説します。
map関数の出力をlist型(リスト)オブジェクトに変換
基本的にはイテレータオブジェクトのままの方が使い勝手が良いケースが多いのでmap関数からの出力をリストオブジェクトに置き換える事はあまりないですが、内容確認を行いやすくするためなどリスト型に置き換える方法も解説しておきましょう。
map関数の出力をリスト関数の引数に渡すことでリスト化できます。
list(map(関数, 配列オブジェクト))
実際にリスト型で出力してみましょう。
words = ['Python', 'CSS', 'HTML', 'JavaScript']
def text_lower(word):
return word.lower()
x = map(text_lower, words)
x = list(map(text_lower, words))
print(x)
print(type(x))
出力結果
['python', 'css', 'html', 'javascript']
<class 'list'>
map関数内で全ての要素を小文字化する関数が適用された結果がリストオブジェクトで出力されました。
map関数とlambda式をあわせて利用する
Pythonの無名関数『lambda』の解説ページでも少し触れましたが引数に関数を扱うmap関数とlambda式は非常に相性が良いです。
lambdaについて簡単に復習しておきましょう。lambda式の記述方法は下記のようになっています。
- lambda 引数:返り値(実行処理)
lambdaについては下記のページで詳しく解説しています。
Pythonのlambda(ラムダ式:無名関数)の使い方
Pythonで関数名を持たない無名関数をlambda(ラムダ式)で記述する方法を解説。関数名の指定が必要ないためちょっとした実行処理であれば1行で簡素に記述することができ、関数の引数に簡単な独自関数を渡す場合などに利用します。
map関数とlambda式をあわせた記述にコードを変更してみましょう。
words = ['Python', 'CSS', 'HTML', 'JavaScript']
x = map(lambda word:word.lower(), words)
print(next(x))
print(next(x))
print(next(x))
print(next(x))
出力結果
python
css
html
javascript
冒頭で紹介したサンプルコードになりましたね。返された値がイテレータオブジェクトであることをわかりやすくするためにnext関数を使って出力しています。
map関数とlambda式をあわせた使い方は頻繁に出てきます。この形を1つのテンプレートとして覚えておいても良いでしょう。
今日のdot
今回はPythonのmap関数の使い方について学習しました。『map関数』はリスト、タプル、辞書、文字列等の配列オブジェクト内の全ての要素に対して任意の関数の実行処理を適用してイテレータオブジェクトを返します。
最後のサンプルコードで示したlambda式とmap関数を組み合わせた利用方法はとても便利ですので覚えておきましょう。
ちなみに、Pythonの発案者であるグイド・ヴァンロッサム氏はlambdaとmap関数の組み合わせをあまり良しとしておらずジェネレータ式を使うことを推奨しています。
- map(Func, S) = (Func(x) for x in S)
Pythonで作業メモリを節約できるジェネレータ内包表記の使い方
Pythonで作業メモリを節約しプログラムの実行処理速度を高速化させるジェネレータ内包表記について解説。ジェネレータ関数に似ていますが関数ではなく式のためより簡潔なコードで記述でき、膨大な数の演算でも処理できます。
【フリーランス向けの完全無料Pythonプログラミング講座】
dot blogではこの記事以外にも完全無料でフリーランス向けのPythonプログラミング講座を公開中です。フリーランスとして活躍し稼ぐための強力な武器となりますよ。
Python入門講座【無料のプログラミング学習講座】
最近特に注目度が高くなってきているプログラミング言語Python。転職、フリーランス、独立・起業を検討中、日々の業務が忙しい社会人等は今こそ身に付けておきたいスキルの1つ。初心者向けにやさしいプログラミング学習内容のPython入門講座を無料で公開。