大規模なものから、小規模なものまで、サービスをつくるとなると、データを配列(リスト)で処理する場面によく遭遇します。そういった、リストで保持しているデータ一式に変更を加えたい場合、どうしますか?
データ処理したいリストとは別に新しいリストを作成して、for文で繰り返し、forループの中で処理した値を新しいリストに代入していきますか?
そういったやり方をせざるを得ないときもあります。しかし、map()関数やfilter()関数を使うと、リストのデータを一定のルールで変更したいときに非常にスマートな記述でプログラムを書くことができます。
今回は、Pythonを使って、map()関数とfilter()関数を説明します。map()関数とfilter()関数は、Rubyやjavascriptなどの他のプログラミング言語でも使用される関数ですので、しっかりと理解してしまいましょう。
リストやforループの概念を知らないと、理解が出来ない内容ですので、それらの知識が甘い人は以上の記事で知識を補強してから読んで下さい。
lambda(無名関数)を使うべし
map()関数とfilter関数を使う際に、絶対と言っていいほど使う技術「lambda(無名関数)」

使い方は、こういった形です。
lambdaに関する記事があるので、lambdaがわからないよ!って人は、コチラを参照
map()関数
map()関数は、
map(function, リスト)
という記述方法で使用します。
function部分に一定のルールを記述することで、そのルール通りにリストの中の値をすべて変更してくれます。
例を見たほうが早いので、以下は、リストの中の数字をすべて5倍にしたリストをmap()関数を使用して作成しています。
1 2 3 4 5 6 7 |
#map()関数でnumsリストの中身を5倍にする nums = [1,3,5,7,9] result = map(lambda i : i * 5, nums) print(list(result)) #結果 [5, 15, 25, 35, 45] |
numsリストに入っているすべての値に、lambda関数で指示した内容(すべてを5倍する)を実行して、resultの中に格納しました。
こういった使い方をすることで、リストの値を自由に変更することができます。
filter()関数
filter()関数もmap()関数とほとんど同じような使い方ができます。
filter(function, リスト)
map()関数との違いは、すべての値に条件を適用して新しいリストを作るのではなく、条件に当てはまった値だけを取り出してリストを作るということです。
こちらも例を見たほうが理解が早いと思いますので、以下に、偶数だけ値を取り出してリストを作るfilter()関数の使い方を示します。
1 2 3 4 5 6 7 |
#filter()関数で偶数だけのリストを作る。 nums = [1,2,3,4,5,6,7,8,9,10] result = filter(lambda i : i % 2 == 0, nums) print(list(result)) #結果 [2, 4, 6, 8, 10] |
map()関数とほとんど変わりませんよね?
filter()関数を使えば、リストから条件に当てはまった値だけを取り出して、新たなリストを作成することができます。
例えば、学校の生徒の成績をリストで管理していて、30点以下の生徒のリストを作りたい!ってときに便利な関数ですよね。
ともに頻出する関数
map()関数もfilter()関数は、Pythonだけではなく、jsやRuby,PHPといった他のプログラミング言語でも頻出する関数です。
そして、こういった処理を適材適所でかけるようにならないと、無駄なforループや、無駄なリストだらけの汚いソースコードになってしまいます。
mapとfilterを使って、かっこいいソースを書きましょう!