Filter 関数
CoddyのPythonジャーニー「ロジックとフロー」セクションの一部。レッスン 73/78。
`filter()` `function` は主に2つのものを受け取ります:
- `function`(各要素をチェックするための指示が含まれます)
- 要素のシーケンス(`list` や、要素のコレクションなど)
シーケンス内の各要素を1つずつ確認し、関数テストに合格したもの(関数が True を返したとき)のみを保持します。
例えば:
def is_even(n):
return n % 2 == 0
numbers = [1, 2, 3, 4, 5, 6] # これは単なる数字のリストです
even_numbers = filter(is_even, numbers)
print(list(even_numbers))
# 出力: [2, 4, 6]ここで何が起きたか:
- 数値のリストがあります: [1, 2, 3, 4, 5, 6]
filter関数が各要素を1つずつ取り出します- 各要素を
is_even関数に渡して評価します
- 関数が True を返す場合、その数値は保持されます
- 関数が False を返す場合、その数値は除外されます
ざる(ストレーナー)のようなものと考えてください:
1という数値が入る →is_evenが False を返す → 数値は除外される2という数値が入る →is_evenが True を返す → 数値は残る
- 数値 3 が入る →
is_evenが False を返す → 数値が除外される、というように続いていきます...
別の関数を定義する代わりに、無名関数(ラムダ:lambda)と呼ばれる簡潔な1行の関数を使用することもできます:
numbers = [1, 2, 3, 4, 5, 6]
even_numbers = filter(lambda n: n % 2 == 0, numbers)
print(list(even_numbers))
# 出力: [2, 4, 6]filter() 関数は、数値だけでなく、あらゆる要素のコレクションに対して機能します。以下は文字列の例です:
words = ["apple", "banana", "cherry", "date"]
long_words = filter(lambda word: len(word) > 5, words)
print(list(long_words))
# Output: ["banana", "cherry"]チャレンジ
簡単引数として文字列のリスト strings を受け取る get_long_strings という名前の関数を作成してください。この関数は filter() 関数を lambda 関数と共に使用して、長さが 5 より大きい文字列を選択する必要があります。関数は選択された文字列を含むリストを返す必要があります。
自分で試してみよう
def get_long_strings(strings):
# filter() と lambda 関数を使って、長さが 5 より大きい文字列を選択する
# 下の空のリストをその式で置き換える
long_strings = []
# 選択された文字列のリストを返す
return list(long_strings)このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ロジックとフローのすべてのレッスン
自分で練習してみよう: Pythonオンラインコンパイラ