ウェブサイト検索

Pythonのmap()関数


Pythonのmap()関数は、指定された反復可能オブジェクトのすべての要素に関数を適用し、mapオブジェクトを返すために使用されます。Pythonのmapオブジェクトはイテレータであるため、その要素を反復処理することができます。また、mapオブジェクトをリストやタプルなどのシーケンスオブジェクトに変換することもできます。

Pythonのmap()関数

Pythonのmap()関数の構文は次のとおりです:

map(function, iterable, ...)

map()関数に複数の反復可能な引数を渡すことができますが、その場合、指定された関数はそれだけの引数を持っている必要があります。関数はこれらの反復可能な要素に並行して適用されます。複数の反復可能な引数を使用すると、最も短い反復可能なオブジェクトが消費されるとmapのイテレータは停止します。

Pythonのmap()の例

map()関数で使用するための関数を書きましょう。

def to_upper_case(s):
    return str(s).upper()

これは、入力オブジェクトの大文字列表現を返すシンプルな関数です。また、イテレータの要素を印刷するユーティリティ関数も定義しています。この関数は、イテレータの要素を空白を含めて印刷し、すべてのコードスニペットで再利用されます。

def print_iterator(it):
    for x in it:
        print(x, end=' ')
    print('')  # for new line

さまざまなタイプのイテラブルを使用したmap()関数の例を見てみましょう。

Pythonのmap()と文字列

map() with string
map_iterator = map(to_upper_case, 'abc')
print(type(map_iterator))
print_iterator(map_iterator)

出力 :

<class 'map'>
A B C 

Pythonのmap()とタプル

map() with tuple
map_iterator = map(to_upper_case, (1, 'a', 'abc'))
print_iterator(map_iterator)

出力 :

1 A ABC 

Pythonのmap()とリスト

map_iterator = map(to_upper_case, ['x', 'a', 'abc'])
print_iterator(map_iterator)

出力 :

X A ABC 

マップをリスト、タプル、セットに変換する

マップオブジェクトはイテレーターであるため、リスト、タプル、セットなどを作成するためのファクトリーメソッドに引数として渡すことができます。

map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_list = list(map_iterator)
print(my_list)

map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_set = set(map_iterator)
print(my_set)

map_iterator = map(to_upper_case, ['a', 'b', 'c'])
my_tuple = tuple(map_iterator)
print(my_tuple)

出力 :

['A', 'B', 'C']
{'C', 'B', 'A'}
('A', 'B', 'C')

Pythonのmap()とlambda

再利用したくない場合は、map()とともにラムダ関数を使用できます。これは、関数が小さく、新しい関数を定義したくないときに便利です。

list_numbers = [1, 2, 3, 4]

map_iterator = map(lambda x: x * 2, list_numbers)
print_iterator(map_iterator)

出力 :

2 4 6 8 

Pythonのmap()の複数引数

複数のイテラブル引数を使用したmap()関数の例を見てみましょう。

map() with multiple iterable arguments
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)

出力: 5 12 21 32 私たちの関数には2つの引数があることに注意してください。出力マップイテレーターは、この関数を2つのイテラブル要素に平行して適用した結果です。イテラブルのサイズが異なる場合に何が起こるか見てみましょう。

map() with multiple iterable arguments of different sizes
list_numbers = [1, 2, 3, 4]
tuple_numbers = (5, 6, 7, 8, 9, 10)
map_iterator = map(lambda x, y: x * y, list_numbers, tuple_numbers)
print_iterator(map_iterator)

map_iterator = map(lambda x, y: x * y, tuple_numbers, list_numbers)
print_iterator(map_iterator)

出力 :

5 12 21 32 
5 12 21 32 

したがって、引数のサイズが異なる場合、どちらかが使い果たされるまで、map関数は要素に適用されます。

Pythonのmap()関数とNone

関数をNoneとして渡したときに何が起こるか見てみましょう。

map_iterator = map(None, 'abc')
print(map_iterator)
for x in map_iterator:
    print(x)

出力 :

Traceback (most recent call last):
  File "/Users/pankaj/Documents/github/journaldev/Python-3/basic_examples/python_map_example.py", line 3, in <module>
    for x in map_iterator:
TypeError: 'NoneType' object is not callable

完全なPythonスクリプトやその他のPythonの例は、私たちのGitHubリポジトリからチェックできます。

参照:公式ドキュメント

関連記事: