Pythonでリストの処理をするとき、こんなコードを書いたことはありませんか?
# 全ての数字を2倍にしたい
numbers = [1, 2, 3, 4, 5]
doubled = []
for num in numbers:
doubled.append(num * 2)
print(doubled) # [2, 4, 6, 8, 10]
このような「リストの全ての要素に同じ処理をする」作業は、map関数を使うともっと簡単に書けます。
map関数とは
- リストの全ての要素に同じ処理を適用する関数
- for文よりも短く、読みやすいコードが書ける
- Pythonに最初から入っている便利な機能
この記事では、map関数の使い方を初心者にも分かりやすく説明します。
map関数の基本的な使い方

基本の書き方
map(関数, リスト)
map関数の仕組み
- リストの要素を一つずつ取り出す
- 指定した関数に要素を渡して処理する
- 処理結果を新しいリストとして返す
最初の例
# 数字を2倍にする関数
def double(x):
return x * 2
# map関数を使って全ての数字を2倍に
numbers = [1, 2, 3, 4, 5]
result = map(double, numbers)
doubled_list = list(result)
print(doubled_list) # [2, 4, 6, 8, 10]
重要なポイント
- map関数の結果は「mapオブジェクト」という特殊なもの
list()
を使って普通のリストに変換する必要がある
lambda(ラムダ)式と組み合わせる
小さな処理なら、わざわざ関数を定義しなくても「lambda式」が使えます。
lambda式とは
# 普通の関数
def double(x):
return x * 2
# lambda式(同じ意味)
lambda x: x * 2
lambda式は「その場で作る小さな関数」と考えてください。
map + lambdaの例
# 数字を2倍にする
numbers = [1, 2, 3, 4, 5]
doubled = list(map(lambda x: x * 2, numbers))
print(doubled) # [2, 4, 6, 8, 10]
# 数字を2乗にする
squared = list(map(lambda x: x ** 2, numbers))
print(squared) # [1, 4, 9, 16, 25]
# 文字列を大文字にする
words = ['hello', 'world', 'python']
upper_words = list(map(lambda x: x.upper(), words))
print(upper_words) # ['HELLO', 'WORLD', 'PYTHON']
実際の使用例
例1:数値の変換
# 温度をセ氏から華氏に変換
celsius = [0, 20, 30, 40]
fahrenheit = list(map(lambda c: c * 9/5 + 32, celsius))
print(fahrenheit) # [32.0, 68.0, 86.0, 104.0]
# 文字列を数値に変換
str_numbers = ['1', '2', '3', '4']
int_numbers = list(map(int, str_numbers))
print(int_numbers) # [1, 2, 3, 4]
例2:文字列の処理
# 名前の最初を大文字にする
names = ['alice', 'bob', 'charlie']
capitalized = list(map(lambda name: name.capitalize(), names))
print(capitalized) # ['Alice', 'Bob', 'Charlie']
# 文字列の長さを取得
words = ['cat', 'dog', 'elephant']
lengths = list(map(len, words))
print(lengths) # [3, 3, 8]
例3:リストの中の辞書を処理
# 学生の点数データ
students = [
{'name': '田中', 'score': 85},
{'name': '佐藤', 'score': 92},
{'name': '鈴木', 'score': 78}
]
# 名前だけを取り出す
names = list(map(lambda student: student['name'], students))
print(names) # ['田中', '佐藤', '鈴木']
# 点数だけを取り出す
scores = list(map(lambda student: student['score'], students))
print(scores) # [85, 92, 78]
複数のリストを同時に処理する
map関数は、複数のリストを同時に処理することもできます。
# 2つのリストの要素を足し算
list1 = [1, 2, 3]
list2 = [10, 20, 30]
sums = list(map(lambda x, y: x + y, list1, list2))
print(sums) # [11, 22, 33]
# 3つのリストの要素を掛け算
list1 = [1, 2, 3]
list2 = [2, 3, 4]
list3 = [3, 4, 5]
products = list(map(lambda x, y, z: x * y * z, list1, list2, list3))
print(products) # [6, 24, 60]
既存の関数を使う

lambda式を使わなくても、既存の関数を直接使えます。
# str関数を使って数値を文字列に変換
numbers = [1, 2, 3, 4]
str_numbers = list(map(str, numbers))
print(str_numbers) # ['1', '2', '3', '4']
# abs関数を使って絶対値を取得
numbers = [-1, -2, 3, -4]
abs_numbers = list(map(abs, numbers))
print(abs_numbers) # [1, 2, 3, 4]
# round関数を使って小数を四捨五入
decimals = [1.2, 2.7, 3.5, 4.1]
rounded = list(map(round, decimals))
print(rounded) # [1, 3, 4, 4]
for文との比較
同じ処理をfor文とmap関数で比べてみましょう。
for文の場合
# 全ての数字を3倍にする(for文)
numbers = [1, 2, 3, 4, 5]
result = []
for num in numbers:
result.append(num * 3)
print(result) # [3, 6, 9, 12, 15]
map関数の場合
# 全ての数字を3倍にする(map関数)
numbers = [1, 2, 3, 4, 5]
result = list(map(lambda x: x * 3, numbers))
print(result) # [3, 6, 9, 12, 15]
map関数のメリット
- コードが短くなる
- 一目で「全ての要素に処理を適用している」と分かる
- 関数型プログラミングのスタイル
for文のメリット
- 複雑な処理も書きやすい
- 条件分岐を含む処理に向いている
- 初心者には理解しやすい
よくある間違いとその解決方法
間違い1:listで変換するのを忘れる
# 間違い
numbers = [1, 2, 3]
result = map(lambda x: x * 2, numbers)
print(result) # <map object at 0x...>
# 正しい
result = list(map(lambda x: x * 2, numbers))
print(result) # [2, 4, 6]
間違い2:mapオブジェクトを再利用しようとする
# 間違い
numbers = [1, 2, 3]
map_obj = map(lambda x: x * 2, numbers)
list1 = list(map_obj) # [2, 4, 6]
list2 = list(map_obj) # [] 空になる!
# 正しい
numbers = [1, 2, 3]
result = list(map(lambda x: x * 2, numbers))
list1 = result # [2, 4, 6]
list2 = result # [2, 4, 6]
間違い3:引数の数が合わない
# 間違い(lambda式の引数は1つなのに、リストを2つ渡している)
list1 = [1, 2, 3]
list2 = [4, 5, 6]
result = list(map(lambda x: x * 2, list1, list2)) # エラー!
# 正しい(lambda式の引数を2つにする)
result = list(map(lambda x, y: x + y, list1, list2)) # [5, 7, 9]
map関数と他の機能との比較
リスト内包表記との比較
同じ処理をリスト内包表記でも書けます。
numbers = [1, 2, 3, 4, 5]
# map関数
doubled_map = list(map(lambda x: x * 2, numbers))
# リスト内包表記
doubled_list = [x * 2 for x in numbers]
# どちらも結果は同じ
print(doubled_map) # [2, 4, 6, 8, 10]
print(doubled_list) # [2, 4, 6, 8, 10]
どちらを使うべき?
- 単純な変換:map関数の方が短い
- 条件付きの処理:リスト内包表記の方が分かりやすい
- チームの方針:プロジェクトで統一する
filter関数との組み合わせ
map(変換)とfilter(絞り込み)を組み合わせることもできます。
numbers = [1, 2, 3, 4, 5, 6]
# 偶数だけを取り出して2倍にする
even_doubled = list(map(lambda x: x * 2, filter(lambda x: x % 2 == 0, numbers)))
print(even_doubled) # [4, 8, 12]
# 同じことをリスト内包表記で
even_doubled2 = [x * 2 for x in numbers if x % 2 == 0]
print(even_doubled2) # [4, 8, 12]
実践的な使用例

例1:CSVデータの処理
# CSVの行データ(文字列)を数値に変換
csv_row = "1,2,3,4,5"
str_numbers = csv_row.split(",")
int_numbers = list(map(int, str_numbers))
print(int_numbers) # [1, 2, 3, 4, 5]
# 複数行の処理
csv_data = ["1,2,3", "4,5,6", "7,8,9"]
all_numbers = list(map(lambda row: list(map(int, row.split(","))), csv_data))
print(all_numbers) # [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
例2:Webフォームのデータ処理
# フォームから送信されたデータ(文字列)を整理
form_data = {
'ages': ['25', '30', '35'],
'scores': ['85.5', '92.0', '78.5']
}
# 年齢を整数に変換
ages = list(map(int, form_data['ages']))
print(ages) # [25, 30, 35]
# スコアを浮動小数点数に変換
scores = list(map(float, form_data['scores']))
print(scores) # [85.5, 92.0, 78.5]
例3:ファイル名の一括変更
# ファイル名のリスト
filenames = ['photo1.jpg', 'photo2.jpg', 'photo3.jpg']
# 全てを大文字に変換
upper_names = list(map(lambda name: name.upper(), filenames))
print(upper_names) # ['PHOTO1.JPG', 'PHOTO2.JPG', 'PHOTO3.JPG']
# 拡張子を変更
new_names = list(map(lambda name: name.replace('.jpg', '.png'), filenames))
print(new_names) # ['photo1.png', 'photo2.png', 'photo3.png']
map関数を使うべき場面
使うべき場面
- 全ての要素に同じ処理を適用したい
- 既存の関数を使いたい(int、str、len など)
- 関数型プログラミングのスタイルを好む
- コードを短くしたい
使わない方が良い場面
- 複雑な条件分岐がある
- エラーハンドリングが必要
- 処理の途中で変数を使いたい
- チームがfor文を好む
まとめ
map関数は、Pythonでリスト処理を効率的に行うための強力なツールです。
重要なポイント
- map関数は全ての要素に同じ処理を適用する
- 結果はmapオブジェクトなので、list()で変換が必要
- lambda式と組み合わせると短いコードが書ける
- 既存の関数(int、str、len など)も使える
- 複数のリストを同時に処理できる
基本的な使い方
# 基本形
result = list(map(関数, リスト))
# lambda式を使う場合
result = list(map(lambda x: 処理, リスト))
# 既存の関数を使う場合
result = list(map(int, 文字列リスト))
使い分けの目安
- 単純な変換:map関数
- 条件付きの処理:リスト内包表記
- 複雑な処理:for文
コメント