イントロダクション
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のタプルの使い方|zip関数やmap関数を使う方法を解説する
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
|
を出力します。
この例では、ラムダ関数がタプルの要素 num1
とリストの要素 num2
に対して並列に適用されていることがわかります。
出力は予想通り、パラメータとして渡されたオブジェクトの各要素の合計となる。
注意: map()
メソッドに異なるサイズの反復記号が渡された場合、どちらかの要素がなくなるまで map 関数が適用される。
この記事もチェック:Pythonのrandint関数の使い方|引数や範囲指定のやり方を解説
まとめ
さて、この記事では、Pythonの map()
メソッドについて学びました。
このメソッドの使用方法と、その使用方法の異なるフォーマットについて説明します。
何か質問があれば、コメント欄へどうぞ。