pythonのmap関数とは?基本的な使い方やオブジェクトを解説
Pythonのmap関数は、データ処理を効率化する強力な機能です。イテラブルの各要素に関数を適用し、コードを簡潔に保ちながら複雑な処理を実現できます。
本記事では、map関数の基本的な使い方から応用例まで、分かりやすく解説します。lambda式やdef文で定義した関数の活用法、様々なオブジェクトでの使用例を通じて、map関数の魅力を探ります。
map関数を使いこなせば、あなたのPythonプログラミングスキルは確実に向上するでしょう。
Contents
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言語に興味ある方で、キャリアに関する疑問や不安がある方は、ぜひアールストーンの無料相談をご利用ください。