このチュートリアルでは、 Python の map() 関数 を使用して、反復可能オブジェクトのすべての項目に関数を適用する方法を学びます。
Python は、プログラムによる関数の計算としてタスクを定義できる関数 プログラミング パラダイムをサポートしています。 Python 関数をオブジェクトとして扱うことができます。関数は別の関数をパラメータとして受け取り、別の関数を返すことができます。
map()
関数は関数を引数として受け取り、それをシーケンス内のすべての項目に適用できます。
このチュートリアルを終えると、Python の
map()
関数を使用して、冗長ループとリスト内包表記を書き換えられるようになります。
map()
関数のさまざまな使用方法を理解するために、いくつかの例をコーディングします。
Python リストの要素に関数を適用する方法
例から議論を始めましょう。👩🏫
ここで、
nums
数値のリストです。
nums = [2,4,3,7]
次に、関数
self_pow()
について考えてみましょう。関数
self_pow()
引数として数値を受け取り、その数値をべき乗した数値 (n**n) を返します。
Python では、** は累乗演算子です。 a**b は、 a の b 乗の値、 a b を返します。
def self_pow(n):
return n**n
TO-DO : 関数
self_pow()
をリストnums
のすべての要素に適用して、新しいリストnums_pow
を作成します。
for ループの使用
これを行うには、Python で for ループを使用できます。
-
nums
リスト内のすべての数値について、num
を引数として関数self_pow()
を呼び出します。 -
関数呼び出しの結果を新しいリスト
nums_pow
に追加します。
nums_pow = []
for num in nums:
nums_pow.append(self_pow(num))
print(nums_pow)
出力では、すべての数値
nums
それ自体に累算されます。
nums_pow
リストの要素は次のとおりです: 2
2
、4
4
、3
3
、7
7
。
Output
[4, 256, 27, 823543]
リスト内包表記の使用
リスト内包表記を使用すると、これを簡潔にすることができます。上記の明示的な for ループから、出力式とループスルーするリストを特定できます。

次に、一般的なリスト内包表記を変更できます。
new_list = [<output expression> for item in iterable]
nums_pow
リストを生成するリスト内包表現は次のとおりです。
nums_pow = [self_pow(num) for num in nums]
print(nums_pow)
出力は、予想どおり、for ループを使用した場合と同じです。
Output
[4, 256, 27, 823543]
ループとリストの内包表記の代わりに、反復可能内のすべての項目に関数を適用するのに役立つ簡潔な構文で Python の
map()
関数を使用できます。まず、map 関数の構文を学習しましょう。
Pythonのmap()関数の構文

を使用するための一般的な構文は、
Pythonの
map()
関数は次のとおりです。
map(function, iterable_1,[iterable_2,...,iterable_n])
map()
関数は、
関数
と
iterable という
少なくとも
2 つの引数を受け取ります。
上記の構文では次のようになります。
- function は、 Python 関数、または一般に Python 呼び出し可能な任意の関数を示します。これには、ユーザー定義および組み込み関数、クラス、インスタンスおよびクラス メソッドなどが含まれます。
- iterable は、 リスト、タプル、文字列などの有効な Python 反復可能オブジェクトです。
- map() 関数は、 反復可能な オブジェクト内の すべての 項目に 関数 を適用します。
map() 関数は何を返しますか?
マップオブジェクトを返します。次に、構文
list(map(function,iterable)).
ユースケースに応じて、Python タプルにキャストできます。

Python の
map()
関数の構文を学習したので、コーディング例を始めましょう。
このチュートリアルを進めるには、Python 3.x が必要です。それ以外の場合は、 オンライン Python エディターでコード スニペットを実行できます。
ユーザー定義関数での map() 関数の使用方法

#1
。以前は、
self_pow()
関数を
nums
リスト内のすべての数値に適用していました。
map()
関数の構文では、関数
self_pow
とリスト
nums
引数として渡すことができます。
注
: 関数呼び出しではなく、関数の名前のみを指定する必要があります。
self_pow()
ではなく
self_pow
を使用してください。
map()
関数はマップ オブジェクトを返します。
print(map(self_pow,nums))
<map object at 0x7f7d315c14d0>
次に、次に示すように、list() 関数を使用してマップ オブジェクトをリストにキャストできます。
nums_pow = list(map(self_pow,nums))
print(nums_pow)
以下は、
nums
のすべての
num
が
nums_pow
リストの num
num
にマップされる出力です。
Output
[4, 256, 27, 823543]
#2
。インチをセンチメートルに変換する次の関数
inch_to_cm()
を考えてみましょう。
1 インチ = 2.54 cm
。
def inch_to_cm(inch):
return inch*2.54
inches
リストのインチ値をセンチメートルに変換するには、以下のコード セルに示すように、
map()
関数を使用できます。
inches = [5.54,3.4,1,25,8.2]
cms = list(map(inch_to_cm,inches))
print(cms)
cms
リストには、センチメートルで表されたインチ値が含まれています。
Output
[14.0716, 8.636, 2.54, 63.5, 20.828]
組み込み関数でのmap()関数の使用方法
このセクションでは、Python の組み込み関数で
map()
を使用する方法を学びます。
#1
。リスト
strings
プログラミング言語のリストです。大文字のプログラミング言語文字列を含む新しいリスト
strings_upper
を作成するとします。
strings = ['JavaScript','Rust','Python','Go']
組み込みの文字列メソッド
.upper()
文字列に作用し、大文字でフォーマットされたコピーを返します。
strings_upper = list(map(str.upper,strings))
print(strings_upper)
リスト
strings_upper
には、大文字でフォーマットされたリスト
strings
内の文字列が含まれます。
Output
['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']
#2
。 Python の組み込み
len()
関数は、シーケンスを引数として受け取り、その長さを返します。
strings
リスト内の各文字列の長さを調べるには、次に示すように、
map()
関数を使用し、各文字列に length 関数を適用します。
strings_len = list(map(len,strings))
print(strings_len)
Output
[10, 4, 6, 2]
#3
。
map()
関数はタプルなどの他のコレクションとともに使用できます。
次の例には、住宅が位置する寝室の数、エリア、都市に関する情報を含むタプルが含まれています。
Python では、
type()
関数は Python オブジェクトのデータ型を返します。このタプル内のすべての項目のデータ型を取得するには、
map()
関数を使用して各タプル項目の
type
関数を呼び出します。
house = (2,758.5,'Bangalore')
house_elt_type = tuple(map(type,house))
print(house_elt_type)
マップ オブジェクトをタプルにキャストしました。リストまたはその他のコレクションにキャストすることもできます。
以下の出力では、2、758.5、Bangalore のデータ型がそれぞれ「int」、「float」、「str」として推論されていることがわかります。
Output
(<class 'int'>, <class 'float'>, <class 'str'>)
#4 。 Python では、組み込みモジュールをインポートし、モジュールで定義された関数を使用できます。
nums
リスト内のすべての数値の平方根を計算するには、数学モジュールの平方根関数
sqrt
を使用できます。
import math
nums = [30,90,34,45,97]
nums_sqrt = list(map(math.sqrt,nums))
print(nums_sqrt)
Output
[5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]
上記の出力は、解析して追跡するのが困難です。各平方根の値を小数点第 2 位に四捨五入することもできます。
Python で浮動小数点数を丸める方法
浮動小数点値を受け取り、小数点以下 2 桁に四捨五入する関数
round_2()
を定義しましょう。
def round_2(num):
return round(num,2)
これで、
round_2
と
nums_sqrt
リストを指定して
map()
関数を使用できるようになりました。
nums_sqrt_round = list(map(round_2,nums_sqrt))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]
ネストされた
map()
関数を使用することもできます。この場合、内側のマップ関数は平方根リスト
list nums_sqrt
の計算に使用され、外側のマップ関数は丸め操作を実行します。
nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums))))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]
上記のどちらのアプローチでも出力は同じです。ただし、上に示したように関数をネストする場合は、コードが読みやすく保守しやすいことを確認する必要があります。
Lambda 関数で map() 関数を使用する方法

前のセクションでは、Python の
map()
関数を組み込み関数およびユーザー定義関数とともに使用する方法を学習しました。ここでは、Python では匿名であるラムダ関数で map() 関数を使用する方法を学びます。
場合によっては、本体にコードが 1 行しか含まれていない関数があり、その関数を 1 回だけ使用し、プログラム内の他の場所では参照しない必要がある場合があります。このような関数は、Python では ラムダ関数 として定義できます。
注 : lambda args:expression は、Python ラムダ関数を使用するための一般的な構文です。
#1
。次のリスト
strings
について考えてみましょう。各文字列の逆コピーを含むリスト
strings_rev
を取得するとします。
strings = ['JavaScript','Rust','Python','Go']
文字列スライスを使用して Python 文字列を反転できます。
注 : これは、文字列スライス式
str[start:stop:step]
を一般化したものです。–
start
とstop
値を指定しないと、スライスは文字列の先頭から始まり、文字列の末尾まで広がります。
–step
に負の値を指定すると、文字列の末尾からスライスが開始されます。
– したがって、str[::-1]
str の反転コピーを返します。
次のラムダ関数を使用できます:
lambda x:x[::-1]
以下に示すように、マップ関数内で。
strings_rev = list(map(lambda x:x[::-1],strings))
print(strings_rev)
他の例と同様に、マップ オブジェクトをリストにキャストします。出力では、リスト文字列内の各文字列が反転されていることがわかります。
Output
['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']
#2 。前のセクションでは、数値リスト内のすべての数値の平方根を計算し、各平方根の値を小数点第 2 位に四捨五入しました。
これを行うには関数
round_2()
を使用しました。
round_2()
関数をラムダ関数として書き直して、以下で説明する
map()
関数と一緒に使用してみましょう。
nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt))
print(nums_sqrt_round_l)
以下に示すように、出力は、
round_2()
関数を使用して取得したものと同じです。
Output
[5.48, 9.49, 5.83, 6.71, 9.85]
複数のイテラブルで map() 関数を使用する方法
これまでに説明した例では、1 つの反復可能オブジェクトのすべての項目に関数を適用しました。
場合によっては、2 つ以上の引数を取る関数がある場合があります。この場合、各引数はリストまたは同様のコレクションに格納されます。
複数のリストに対して Python map() 関数を使用することもできます。
#1
。
length
と
breadth
を入力として受け取り、面積
length*breadth
を返す次の関数
area()
について考えてみましょう。
def area(length,breadth):
return length*breadth
異なる長方形の長さと幅は、それぞれ
lengths
と
breadths
2 つの別個のリストに格納されます。
lengths = [4,8,10,18]
breadths = [9,4,6,11]
map()
関数を使用して、
lengths
と
breadths
の両方のリストを渡すことで、上記のリストに面積関数を適用できます。
areas = list(map(area,lengths,breadths))
print(areas)
関数領域は 2 つの引数を受け入れるため、長さと幅の値はそれぞれリスト
lengths
breadths
から使用されます。
Output
[36, 32, 60, 198]
#2 。 Python 数学モジュールには、 任意の底に対する数値の対数を計算するのに役立つ log 関数があります。
注 : log(x,base) は、 log x の値を、値 base で指定された底数、 logbase x に返します。底が指定されていない場合、デフォルトの底の値は e (log は自然対数を計算します) です。
この例では:
-
リスト
x
対数を計算する値に対応します。 -
base
リストには、対数計算で使用されるすべての底値が含まれます。
x = [2,6,12,10]
base = [2,3,2,5]
次のように、Python の map() 関数を
math.log
、リスト、
x
、
base
とともに使用して、新しいリスト
log_x
を取得できます。
log_x = list(map(math.log,x,base))
print(log_x)
これが出力です。
Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]
結論
このチュートリアルで学んだことの概要は次のとおりです。
- Pythonのmap()関数は、構文 map(function, iterable(s)) で、関数と反復可能という少なくとも2つの引数を受け取ります。
- 関数には、 呼び出し可能な有効な Python を使用できます。
-
関数が
k 個
の引数を受け取る場合は、関数と
k
個の各引数を反復可能な関数とともに使用して、
map()
関数を使用します。
次に、Python でセットを操作する方法を学びます。また、Python のスリープ関数の使用方法も学びます。