Menu
Coddy logo textTech

Filter 関数

CoddyのPythonジャーニー「ロジックとフロー」セクションの一部。レッスン 73/78。

`filter()` `function` は主に2つのものを受け取ります:

  1. `function`(各要素をチェックするための指示が含まれます)
  2. 要素のシーケンス(`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. 1 という数値が入る → is_even が False を返す → 数値は除外される
  2. 2 という数値が入る → is_even が True を返す → 数値は残る
  1. 数値 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"]
challenge icon

チャレンジ

簡単

引数として文字列のリスト strings を受け取る get_long_strings という名前の関数を作成してください。この関数は filter() 関数を lambda 関数と共に使用して、長さが 5 より大きい文字列を選択する必要があります。関数は選択された文字列を含むリストを返す必要があります。

自分で試してみよう

def get_long_strings(strings):
    # filter() と lambda 関数を使って、長さが 5 より大きい文字列を選択する
    # 下の空のリストをその式で置き換える
    long_strings = []
    
    # 選択された文字列のリストを返す
    return list(long_strings)
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Pythonオンラインコンパイラ