Python での map() 関数の使用方法

Python の map() 関数の使用方法を学びます。ループを書かずに反復可能オブジェクトに関数を適用する方法をマスターし、マップをリスト内包表記と比較します。

エディターでこのソリューションを試してください

概要

データのコレクションを処理するときは、多くの場合、反復可能な項目ごとに特定の変換を適用する必要があります。たとえば、文字列数値のリストを整数に変換したり、文字列のデータベース配列を小文字に変換して正規化したりします。 Python では、冗長な `for` ループを記述する代わりに、`map()` と呼ばれる組み込みツールが提供されています。

`map(function, iterable)` 関数は、変換関数と反復可能関数を引数として受け取ります。この関数は反復可能オブジェクトの各要素に適用され、反復子オブジェクト (「マップ」オブジェクト) を返します。これは反復子として返されるため、計算は遅延して実行されます。要素は反復処理時にのみ処理されるため、大規模なデータセットのメモリが節約されます。

マップ オブジェクトのリスト表現をすぐに取得するには、`list()` コンストラクター: `list(map(func, data))` を使用して結果をキャストする必要があります。インライン実行のために、標準関数、標準ライブラリ関数 (`str` や `len` など)、または `lambda` キーワードで宣言されたカスタム匿名関数を直接 `map()` に渡すことができます。

コードと実行の出力

このスクリプトは、文字列変換を伴う map() 関数を使用したコレクションの変更、リスト項目の数値へのマッピング、ラムダ コールバックの使用を示します。

# 1. Map string conversion over a list of numbers
numbers = [1, 2, 3, 4]
string_numbers = list(map(str, numbers))
print("Mapped to strings:", string_numbers)

# 2. Square numbers using a lambda function inside map()
squared = list(map(lambda x: x**2, numbers))
print("Squared numbers:", squared)

# 3. Apply custom logic function to items
def normalize_name(name):
    return name.strip().capitalize()

names = ["  alice", "BOB  ", " charlie "]
clean_names = list(map(normalize_name, names))
print("Clean names list:", clean_names)
端子出力
Mapped to strings: ['1', '2', '3', '4']
Squared numbers: [1, 4, 9, 16]
Clean names list: ['Alice', 'Bob', 'Charlie']

段階的な実装

  • コレクション内のすべての要素に適用する変換関数を特定します。
  • map(function_name, iterable) を呼び出して、変換された要素の遅延反復子を作成します。
  • 標準リストとしてすべての要素にすぐにアクセスする必要がある場合は、map() 呼び出しを list() 内にラップします。
  • map() をラムダ関数と組み合わせて、迅速な 1 回限りのインライン変換を実現します。

よくある質問

map() はリスト内包表記よりも優れていますか?

コミュニティでは一般に、リスト内包表記の方が読みやすく、Python 的であると考えられています。ただし、既存の組み込み関数 (map(str, list) など) を適用すると、最適化された C コード ループが実行されるため、map() の方が高速になる可能性があります。

map() は複数のイテラブルを受け取ることができますか?

はい!変換関数が複数の引数を取る場合は、複数の反復可能オブジェクトを map() に渡すことができます。たとえば、map(lambda x, y: x + y, list1, list2) は要素をペアごとに追加します。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。