Python map() 関数、例で説明
公開: 2022-08-25このチュートリアルでは、 Python map() 関数を使用して iterable のすべてのアイテムに関数を適用する方法を学びます。
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**nTO-DO : リスト
numsのすべての要素に関数self_pow()を適用して、新しいリスト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() 関数は、 iterable内のすべてのアイテムに関数を適用します
map() 関数は何を返しますか?
マップ オブジェクトを返します。 次に、構文list(map(function,iterable)).
ユースケースによっては、Python タプルにキャストできます。

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

#1 。 以前は、 numsリストのすべての数値にself_pow()関数を適用していました。 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_pow num nums 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()関数を使用して、以下に示すように各文字列に長さ関数を適用します。
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)map オブジェクトをタプルにキャストしました。 リストやその他のコレクションにキャストすることもできます。
以下の出力では、2、758.5、およびバンガロールのデータ型が、それぞれ「int」、「float」、および「str」と推測されていることがわかります。
Output (<class 'int'>, <class 'float'>, <class 'str'>)#4 。 Python では、組み込みモジュールをインポートして、モジュールで定義された関数を使用できます。
numsリスト内のすべての数値の平方根を計算するには、math モジュールの平方根関数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()関数を使用することもできます。この場合、内側の map 関数は平方根list nums_sqrtを計算するために使用され、外側の map 関数は丸め操作を実行します。
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 つの iterable のすべてのアイテムに関数を適用しました。
2 つ以上の引数を取る関数がある場合があります。 この場合、各引数はリストまたは同様のコレクションに格納されます。
複数のリストで Python の map() 関数を使用することもできます。
#1 。 入力としてlengthとbreadthを受け取り、面積length*breadthを返す次の関数area()を検討してください。
def area(length,breadth): return length*breadth 異なる四角形の長さとbreadthsは、それぞれlengthsと幅の 2 つの個別のリストに格納されます。
lengths = [4,8,10,18] breadths = [9,4,6,11] map()関数を使用して、 lengthsとbreadthsの両方のリストを渡すことにより、上記のリストに area 関数を適用できます。
areas = list(map(area,lengths,breadths)) print(areas) 関数領域は 2 つの引数を受け入れるため、長さと幅の値はそれぞれlengths breadthsのリストから使用されます。
Output [36, 32, 60, 198]#2 。 Python math モジュールには、底を底とする数値の対数を計算するのに役立つ log 関数があります。
注: log(x, base)は、 log xの値を、値baseで指定された底、 log base 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() 関数は少なくとも 2 つの引数を取ります: 関数と iterable で、構文はmap(function, iterable(s))です。
- この関数は、任意の有効な Python 呼び出し可能オブジェクトにすることができます。
- 関数がk 個の引数を受け取る場合、関数と iterable 内のk 個の引数のそれぞれで
map()関数を使用します。
次に、Python でセットを操作する方法を学びます。
