filter
このレッスンでできるようになること。filter を使って、条件に合う支出だけを取り出せるようになります。
filter(関数, リスト) は、リストの要素を1つずつ関数に渡し、戻り値が真になった要素だけを順に取り出せるものを返します。map が「全部を変換する」道具だったのに対し、filter は「一部だけ残す」道具です。要素そのものは変わりません。
Python
words = ["森", "図書室", "海"]
is_long = lambda word: len(word) >= 2
selected = filter(is_long, words)
print(list(selected)) # ['図書室']第1引数には判定関数そのもの、第2引数には元のデータを渡します。判定関数が True を返した要素を、変換せずに元の順で残します。演習でも判定関数、filter、リスト化を3行に分けて書きます。
filter も map と同じで、返ってくるのは filter オブジェクトです。そのまま返すと呼び出し側で扱いにくく、一度使い切ると空になってしまいます。結果を使うときは必ず list() に通してください。
渡す関数は真偽値を返す形にします。このような判定用の関数を述語と呼びます。lambda で書いてもよいですし、条件に名前を付けたいときは def で書いて渡しても構いません。
Python
def starts_with_a(word):
return word.startswith("a")
words = ["apple", "book", "ant"]
print(list(filter(starts_with_a, words))) # ['apple', 'ant']第3章のリスト内包表記でも同じことは書けます。どちらを選んでも構いませんが、既にある関数をそのまま条件として使い回したいときは filter のほうが素直です。条件に名前が付いていると、後から読む人が何を残したかったのかを一目で理解できます。
要件
- 金額が min_amount 以上かを返す lambda を作る
- 判定関数と expenses を filter に渡す
- filter の結果を list にして返す
ヒント
編集 ゆめさく編集部