IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

pythonのmap関数とは?基本的な使い方やオブジェクトを解説

Pythonのmap関数は、データ処理を効率化する強力な機能です。イテラブルの各要素に関数を適用し、コードを簡潔に保ちながら複雑な処理を実現できます。

本記事では、map関数の基本的な使い方から応用例まで、分かりやすく解説します。lambda式やdef文で定義した関数の活用法、様々なオブジェクトでの使用例を通じて、map関数の魅力を探ります。

map関数を使いこなせば、あなたのPythonプログラミングスキルは確実に向上するでしょう。

pythonのmap関数とは?

Pythonのmap関数は、イテラブル(リストなど)の各要素に対して指定した関数を適用し、結果を返す便利な組み込み関数です。

map関数を使うと、for文を書かずにリストの要素を一括で処理できます。

map関数は、効率的にデータ処理をおこなえ、コードを簡潔に書けるため、多くのPythonプログラマーに活用されています。

map関数の定義

Pythonのmap関数は与えたイテラブルオブジェクトの各要素に、指定の関数を適用するイテレーターを返します。

戻り値は、必要に応じてリストやタプルに変換できます。

uppercase_fruits = map(str.upper, [“apple”, “banana”, “cherry”])

print(list(uppercase_fruits))  # 出力: [‘APPLE’, ‘BANANA’, ‘CHERRY’]

基本的な書式

map(関数, イテラブル)

関数は各要素に適用する関数、イテラブルは処理対象のイテラブル(複数可)です。

integers = map(int, [1.5, 2.7, 3.1, 4.9, 5.8])

print(list(integers))  # 出力: [1, 2, 3, 4, 5]

上記の例では、int関数を使って各要素を整数にしています。 map関数の返り値はイテレーターなので、結果を表示するためlist()関数でリストに変換しています。

複数のイテラブルを渡す場合は、以下のように書きます。

def add(x, y):

    return x + y

 

result = map(add, [1, 2, 3], [10, 20, 30])

print(list(result))  # 出力: [11, 22, 33]

【Python】map関数の使い方

map関数のいろいろな使い方を見ていきましょう。

基本的な使い方

例えば、数値のリストの各要素を2倍にする場合、次のように書けます。

def double(x):

    return x * 2

 

doubled = list(map(double, [1, 2, 3, 4, 5]))

print(doubled)  # 出力: [2, 4, 6, 8, 10]

関数doubleを定義し、リストとともにmapに渡しています。

リストの値の型を変換する場合

例えば、文字列のリストを整数のリストに変換する場合、次のように書けます。

str_numbers = [‘1’, ‘2’, ‘3’, ‘4’, ‘5’]

int_numbers = list(map(int, str_numbers)) # int関数により文字列を整数に

print(int_numbers)  # 出力: [1, 2, 3, 4, 5]

lambdaを適用する場合

lambda式を使うと、その場で簡単な関数を定義してmap関数に適用できます。

numbers = [1, 2, 3, 4, 5]

cubed = list(map(lambda x: x ** 3, numbers))  # 要素を3乗するlambda式の例

print(cubed)  # 出力: [1, 8, 27, 64, 125]

ただし、可読性を考慮し、複雑な関数はdef文で定義するのがおすすめです。

絶対値を取得する場合

組み込み関数absを使用して、リストの各要素の絶対値を取得できます。

numbers = [2, 1, 0, 1, 2]

absolute = list(map(abs, numbers))

print(absolute)  # 出力: [2, 1, 0, 1, 2]

defで任意の関数を定義して適用する場合

処理が複雑な場合は、def文で関数を定義してからmap関数に適用するとコードが読みやすくなります。

def fahrenheit_to_celsius(f): # 華氏を摂氏に変換する関数

    return (f 32) * 5 / 9

 

temperatures_f = [32, 68, 86, 104, 212] # 華氏温度のリスト

temperatures_c = list(map(fahrenheit_to_celsius, temperatures_f))

print(temperatures_c)  # 摂氏のリストを出力: [0.0, 20.0, 30.0, 40.0, 100.0]

複雑な処理も簡潔に書けるmap関数や、Python自体に興味をお持ちの方は、下記でPythonの資格を詳しく紹介しています。あわせてご覧ください。

参考記事:Python資格試験の種類とは?難易度や勉強方法を紹介

【Python】map関数とイテラブル

本項では、tuple、dict、str、ジェネレータ式など代表的なイテラブルをmap関数で使う方法を解説します。

tuple

タプルはイミュータブル(変更不可)なシーケンスデータ型で、全体を丸括弧()で囲むのが一般的です。

タプルの各要素を2倍にする例

numbers = (1, 2, 3, 4, 5)

doubled = tuple(map(lambda x: x * 2, numbers))

print(doubled)  # 出力: (2, 4, 6, 8, 10)

dict

辞書型(dict)に対してmap関数を使用する場合、キーまたは値、あるいは両方に対して操作ができます。

キーと値の両方を処理したい場合は、items()メソッドを使用します。

my_dict = {‘a’: 1, ‘b’: 2, ‘c’: 3}

result = dict(map(lambda x: (x[0], x[1] * 2), my_dict.items()))

print(result)  # 出力: {‘a’: 2, ‘b’: 4, ‘c’: 6}

str

文字列(str)に対してmap関数を適用すると、各文字に対して操作ができます。

text = “hello”

upper_text = .join(map(str.upper, text))

print(upper_text)  # 出力: HELLO

ジェネレータ式

ジェネレータ式はメモリ効率のよい処理方法を提供します。

num_generator = (i*i for i in range(10))

squared = map(lambda x: x**2, num_generator)

print(list(squared))  # 出力: [0, 1, 16, 81, 256, 625, 1296, 2401, 4096, 6561]

ただし、ジェネレータ式とmapを併用すると、コードの可読性が低下するケースもあり、通常は、ジェネレータ式のみを使うほうが読みやすいコードになります。

map関数を使う魅力とは?

Pythonのmap関数の魅力を2つのポイントから見ていきましょう。

配列の全要素にアクセスできる

mapを使うと、for文を使わずに配列の全要素に簡単にアクセスできるため、コードがシンプルになり、可読性が向上します。

また、mapはイテラブルの種類に依存しないため、リストやタプル、辞書など、さまざまなデータ構造に対して同じように適用できます。

変換処理が不要になる

map関数はジェネレータを返すため、中間リストを作成する必要がなく、メモリ使用量を削減でき、大量のデータを扱う際に特に効果を発揮します。

まとめ

map関数は、Pythonプログラミングで重要な役割を果たします。リスト、タプル、辞書などさまざまなイテラブルに適用でき、関数やラムダ式と組み合わせて柔軟な処理が可能です。

map関数の活用法を学び、より効率的なプログラミングを目指しましょう。

Python言語に興味ある方で、キャリアに関する疑問や不安がある方は、ぜひアールストーンの無料相談をご利用ください。