pythonのmap関数の使い方について紹介します。
map関数について基本的な使い方や注意点、応用例を解説します。
この記事で分かること
- map関数とは
- map関数の基本的な使い方
- map関数とdef文の組合せ
- map関数とlambda(無名関数)の組合せ
- 【使用例1】map関数とsum関数の組合せ
- 【使用例2】map関数とsplitの組合せ
スポンサーリンク
map関数とは
はじめに、map関数について簡単に説明します。
map関数は、pythonにあらかじめ用意されている組み込み関数です。
そのため、importせずに使用することができます。
map関数を用いると、イテラブル(リストやタプルなど)のすべての要素に、関数の処理を適用することができます。
この関数には、absなどの組み込み関数や、def文で定義した関数、lambda(ラムダ式)で定義した関数などが指定可能です。
forループを用いても、イテラブルのすべての要素に処理を行うことができますが、
map関数を使うことで簡潔な記述にすることができ、コード全体の視認性を向上させることができます。
なお、map関数のように、関数を受け取る関数や関数を返す関数のことを高階関数と呼びます。
スポンサーリンク
map関数の基本的な使い方
map関数の基本的な使い方について、紹介します。
第一引数に関数、第二引数にイテラブルオブジェクト(リストやタプルなど)を指定します。
map関数の書き方
map( 関数, イテラブル )
map関数は、map型のオブジェクトを返します。
そのままでは要素を確認できないため、list関数などでリストに変換する必要があります。
以下、map関数のサンプルコードです。
数値の絶対値を算出するabs関数を、イテラブルであるリストの各要素に適用しています。
### map関数のサンプルコード
list_test = [11, 0.3, -5, 3, -1]
print(list_test)
# [11, 0.3, -5, 3, -1]
list_test_m = map(abs, list_test)
print(list_test_m)
# <map object at 0x00000289948332E8>
print(list(list_test_m))
# [11, 0.3, 5, 3, 1]
参考までに、リストの要素の絶対値を計算するコードを、
forループで記載すると下記のようになります。
### リストの要素の絶対値を計算
list_test = [11, 0.3, -5, 3, -1]
print(list_test)
# [11, 0.3, -5, 3, -1]
list_test_abs = []
for num in list_test :
list_test_abs.append(abs(num))
print(list(list_test_abs))
# [11, 0.3, 5, 3, 1]
map関数とdef文の組合せ
map関数は、def文で自分で定義した関数も引数に取ることができます。
以下、サンプルコードです。
### map関数とdef文の組合せ
def square(num) :
return num*num
list_test = [11, 0.3, -5, 3, -1]
list_test_m = map(square, list_test)
print(list(list_test_m))
# [121, 0.09, 25, 9, 1]
def文で、数値を2乗する関数 " square " を定義しています。
map関数の第一引数に、定義した関数" square " を指定し、第二引数にリストを渡しています。
結果を見ると、リストの全ての要素が " square " で処理され、2乗されていることが分かるかと思います。
スポンサーリンク
map関数とlambda(無名関数)の組合せ
lambda (無名関数)は、その名のとおり、名前を定義せずに使える関数のことです。
def文で関数を定義するまでもないような、単純な関数を使いたい場合などに便利です。
また、def文で定義した関数は、機能を確認するのにいちいちdef文の定義位置を探さないといけませんが、
lambdaは関数をその場に記述するので、可読性も向上します。
map関数は、lambdaで定義した関数も引数に指定することができます。
以下、サンプルコードです。
### map関数とlambdaの組合せ
list_test = [11, 0.3, -5, 3, -1]
func = lambda num : num*num
list_test_m = map(func, list_test)
print(list(list_test_m))
# [121, 0.09, 25, 9, 1]
map関数の引数の中で、lambdaを使うこともできます。
### map関数とlambdaの組合せ
list_test = [11, 0.3, -5, 3, -1]
list_test_m = map(lambda num : num*num, list_test)
print(list(list_test_m))
# [121, 0.09, 25, 9, 1]
lambdaを用いることで、コードが簡潔になっていることが分かるかと思います。
lambda(無名関数)については、下記の記事で詳細に解説しています。
併せて参考にしてみてください。
以上が、map関数を使う上で必須の内容になります。
ここからは、参考までに、map関数のその他の使用例について紹介します。
【使用例1】map関数とsum関数の組合せ
map関数と、sum関数を組合せて使用する例を紹介します。
map関数の出力に対し、sum関数を組合せることで総和を算出できます。
前述のサンプルコードにsum関数を組合せた例です。
### map関数とsum関数の組合せ
list_test = [11, 0.3, -5, 3, -1]
result = sum(map(lambda num : num*num, list_test))
print(result)
# 156.09
2乗された要素が、sum関数で足し合わされています。
これだけだと、ただ総和を計算しているだけなので面白くないですね。
例えば、下記のサンプルコードのように、
リストの中で、特定の文字を含む要素数を検出することもできます。
### map関数とsum関数の組合せ
fruits = ["Apple", "Banana", "Orange", "Mango", "Lemon"]
search_char = "a"
result = sum(map(lambda fruit : search_char in fruit, fruits))
print(result)
# 3
スポンサーリンク
【使用例2】map関数とsplitの組合せ
map関数と、splitメソッドを組合せて使用する例を紹介します。
splitは、Pythonの文字列を分割するメソッドです。
splitをmap関数と組合せることで、
文字列として入力された数値を、扱いやすいリストの形に整形することができます。
### map関数とsplitメソッドの組合せ
num_str = "5 10 -2 1"
num_list =list(map(int, num_str.split()))
print(num_list)
# [5, 10, -2, 1]
スペース区切りで入力された数値を、リストの形に整形できていることが分かるかと思います。
さらに、input関数と組合せることで、キーボードから入力された数値を、リストに格納することができます。
### map関数、input関数、splitメソッドの組合せ
input_list =list(map(int, input("スペース区切りで整数を入力してください").split()))
print(input_list)
# スペース区切りで整数を入力してください
>> 11 -2 3
# [11, -2, 3]
スポンサーリンク
まとめ
pythonのmap関数について、基本的な使い方を紹介してきました。
map関数を使いこなせるようになると、コード全体の可読性を改善できます。lambdaと合わせて、使えるようにしておきましょう。
スポンサーリンク