Pythonのmap関数の使い方 配列内の全ての要素に関数処理を適用するのイメージ画像

Pythonのmap関数の使い方 配列内の全ての要素に関数処理を適用する

  • 公開日:2018/11/15
  • 更新日:2018/11/15
  • 投稿者:n bit

Pythonmap関数の基本や使い方について解説。listやtuple、dict等の配列に関数処理を実行したい場合がありますよね。そのような場合に1行の記述で一括処理できてしまう便利な組み込み関数がmap関数です。実行処理後イテレータを返してくれます。

  • Python

この記事は約 分で読めます。(文字)

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文のループで中身を確認する必要があります。

イテレータについて忘れてしまった方は下記のページから再度学習しておきましょう。詳しくは下記のページをご覧ください。

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については下記のページで詳しく解説しています。

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

今回はPythonmap関数使い方について学習しました。『map関数』はリスト、タプル、辞書、文字列等の配列オブジェクト内の全ての要素に対して任意の関数の実行処理を適用してイテレータオブジェクトを返します。

最後のサンプルコードで示したlambda式とmap関数を組み合わせた利用方法はとても便利ですので覚えておきましょう。

ちなみに、Pythonの発案者であるグイド・ヴァンロッサム氏はlambdaとmap関数の組み合わせをあまり良しとしておらずジェネレータ式を使うことを推奨しています。

  • map(Func, S) = (Func(x) for x in S)