map
mapとは、イテラブルなオブジェクトに引数で指定した関数の処理を実行する関数。mapを使うとリストの各要素に対して、引数で受け取った関数の処理を実行することができる。
mapの書式
map(関数,イテラブルオブジェクト)
mapは1つ目の引数に関数をとり、2つ目の引数に指定したイテラブルなオブジェクトに対し、1つ目の関数を関数を適用することになる。
mapで処理されるとイテラブルなマップオブジェクトが返される 。
マップオブジェクトは、ループで処理することが可能で、list()でリストと変換することもできる。
(例)circleという円の面積を求める関数を定義し、mapを使ってnumbersというリストの各要素を半径の長さとして円の面積を求める。
def circle(radius):
'''半径が引数(radius)の円の面積を求める関数'''
return radius **2 * 3.14
numbers = [10,20,30,40,50]
for area in map(circle, numbers):
print(area)
#結果
314.0
1256.0
2826.0
5024.0
7850.0
この例では、mapの1つ目の関数に円の面積を求めるcircleを指定し、2つ目の引数に円の面積を求める対象となる半径の長さを要素とするリストnumbersを指定している。
numbersの全ての要素の面積がmapオブジェクトとして返されるので、それをforでループしてprintで全ての面積を表示している。
mapの結果をリストとして受け取る
マップオブジェクトをリストとして受け取るには、list()を使う。def circle(radius):
'''半径が引数(radius)の円の面積を求める関数'''
return radius **2 * 3.14
numbers = [10, 20, 30, 40, 50]
areas = list(map(circle, lst1))
print(areas)
#結果
[314.0, 1256.0, 2826.0, 5024.0, 7850.0]
上記のコードでは、さっきと同じcircle関数をmapで使い、返されるmapオブジェクトをリストに変換している。
mapをlambdaと一緒に使う
mapはlambdaと使うこともできる。円の面積を求める関数をlambdaで使い、リストを返すのは下記の通り。
numbers = [10, 20, 30, 40, 50]
areas = list(map(lambda num: num ** 2 * 3.14, numbers))
print(areas)
#結果
[314.0, 1256.0, 2826.0, 5024.0, 7850.0]
リスト内包表記を使った書き方
上記のmapをlambdaと一緒に使ったコードをリスト内包表記で書き直すと以下のようになる。numbers = [10, 20, 30, 40, 50]
areas = [num ** 2 * 3.14 for num in numbers]
print(areas)
#結果
[314.0, 1256.0, 2826.0, 5024.0, 7850.0]
以上、
mapの使い方について。
今回はここまで
0 件のコメント :
コメントを投稿