Pythonのmapメソッドの使い方|ラムダ関数や引数が複数の場合の使い方も解説

スポンサーリンク
スポンサーリンク

イントロダクション

Python の map() メソッドは、一連のデータに対して関数や演算を適用するために広く使われています。

このメソッドは、イテラブルの全要素に特定の関数を適用した後、マップオブジェクトを返します。

このマップオブジェクトはイテラブルであり、希望する形に変換することができます。

では、その仕組みとプログラムでの使い方を学びましょう。


map() メソッドのしくみ

一般に、map() メソッドの構文は以下のとおりです。

map_object= map( method , iterable_object, ... )

ここで

  • methodは、map()` メソッドがイテラブルオブジェクトから個々の要素を受け取るための関数です。
  • iterable_object は、関数の操作を実行したいデータセットです。カンマ (‘,’) で区切るだけで、複数のイテラブルを map() メソッドに渡すことができます。その場合、関数はそれら全てに対して並列に適用されます。
  • map_object は、与えられたオブジェクトのすべての要素に関数が適用された後に、 map() メソッドによって返されるイテレート可能なオブジェクトです。

それでは、このメソッドを理解するための基本的な例を見てみましょう。

def make_even(n):        #defining a function that checks if a number is even or not and makes it even if it was not
  if n%2==0:
      return n
  else:
      return n+1
 
num = (1, 2, 3, 4)
map_obj = map(make_even, num) #the map() method applies the function make_even to all the elements of the tuple num
print(type(map_obj))   #printing the type of the object returned by map()
print(list(map_obj))   #type-casting the map object to list and printing it

出力です。

出力:

<class 'map'>
[2, 2, 4, 4]
  • 上の例では、1,2,3,4の4つの要素を持つタプルnumを考えています。
  • また、関数 make_even() を定義し、偶数なら数そのものを返し、偶数に1を足して偶数にし、最後にその値を返しています。
  • 関数 make_even とイテラブル num をパラメータとして map() メソッドを使用した後、結果オブジェクトが map_obj に格納されます。
  • type(map_obj)`をプリントすると、それがどのようなオブジェクトなのかがわかる。これはmapクラスのメンバであることがわかります。
  • もう一度、map_objをリストにタイプ・キャストし、結果を確認するために同じものをプリントします。予想通り、望みの出力が得られます。

Pythonでmap()メソッドを使う

1. map()でのラムダ関数の利用

ご存知のように、ラムダ関数とは、サイズが最小で再利用ができない制限付きの関数です。

ラムダ関数を使うことで、関数が不要になり、関数定義の数を減らすことができます(結果的にコードが小さくなります)。

ここでは、例として map() におけるラムダ関数の使用方法を説明します。

num = (1, 2, 3, 4)
sqrd_obj = map(lambda n: n*n, num) #the map() method applies the lambda function to all the elements of the tuple num
print(list(sqrd_obj))   #type-casting the map object to list for printing it

を出力します。

[1, 4, 9, 16]
  • 上のコードでは、数値を受け取ってその二乗を返す一時的なラムダ関数を定義しています。
  • 出力からわかるように、タプルnumの各要素を正確に2乗した項が得られます。
  • このように、ラムダ関数を使うことで、コードサイズを小さくすることができ、さらに、タスクを実行するために別の関数を定義する必要がなくなりました。

2. map()で複数の引数を使う

先ほど説明したように、実は map() メソッドに指定する関数には複数のイテレート可能なオブジェクトを渡すことができるのです。

その働きを理解するために、例を挙げて並列に説明しましょう。

num1= (1, 2, 3, 4#tuple
num2= [5,6,7,8]     #list
#the map() method applies the lambda function to all the elements of the tuple num1 and list num2 parallelly
sqrd_obj = map(lambda n1,n2: n1+n2, num1, num2 )
print(list(sqrd_obj))   #type-casting the map object to list and printing it

を出力します。

Multiple Argument Map
Multiple Argument Map Example

この例では、ラムダ関数がタプルの要素 num1 とリストの要素 num2 に対して並列に適用されていることがわかります。

出力は予想通り、パラメータとして渡されたオブジェクトの各要素の合計となる。

注意: map() メソッドに異なるサイズの反復記号が渡された場合、どちらかの要素がなくなるまで map 関数が適用される。


まとめ

さて、この記事では、Pythonの map() メソッドについて学びました。

このメソッドの使用方法と、その使用方法の異なるフォーマットについて説明します。

何か質問があれば、コメント欄へどうぞ。


タイトルとURLをコピーしました