Python での filter() 関数の使用方法

Python の filter() 関数を使用してコレクションから要素を抽出する方法を学びます。フィルターをリスト内包表記およびラムダ コールバックと比較します。

エディターでこのソリューションを試してください

概要

データ フィルタリングは、アプリケーション プログラミングの中核となるタスクです。多くの場合、リストを検索して、プロファイル データベースからアクティブ ユーザーを抽出したり、センサー ログから負の数値を除外したりするなど、特定の基準を満たす要素を抽出する必要があります。 Python は、この目的のために `filter()` という名前の組み込み関数ツールを提供します。

`filter(function, iterable)` 関数は、フィルタリング関数と反復可能関数を引数として受け取ります。関数の引数は、各要素のブール値 (「True」または「False」) を返さなければなりません。 `filter()` 関数は各要素を評価し、`True` と評価された要素のみを保持し、結果を含む反復子オブジェクト (`filter` オブジェクト) を返します。

`map()` と同様に、`filter()` は要素を遅延評価します。標準リストがすぐに必要な場合は、`list()` コンストラクター: `list(filter(func, data))` を使用して出力をキャストします。関数パラメータとして `None` を渡すと (例: `filter(None, data)`)、Python は自動的に false の要素をすべて除外します。これは空の値をクリアするための優れた省略表現です。

コードと実行の出力

このスクリプトは、filter() を使用した数値配列のフィルタリング、辞書項目の抽出、および偽の空文字列の破棄を示します。

numbers = [-5, -2, 0, 3, 8, -1]

# 1. Filter positive numbers using a lambda function
positives = list(filter(lambda x: x > 0, numbers))
print("Positives only:", positives)

# 2. Filter list of strings by character length
words = ["cat", "elephant", "dog", "giraffe"]
long_words = list(filter(lambda w: len(w) > 4, words))
print("Words longer than 4 chars:", long_words)

# 3. Shorthand: Remove all falsy values from a list by passing None
mixed_data = ["hello", "", "world", None, False, "active"]
clean_data = list(filter(None, mixed_data))
print("Falsy values removed:", clean_data)
端子出力
Positives only: [3, 8]
Words longer than 4 chars: ['elephant', 'giraffe']
Falsy values removed: ['hello', 'world', 'active']

段階的な実装

  • 要素を受け入れ、フィルター基準を表すブール値を返す関数を定義します。
  • filter(function, iterable) を呼び出して、一致の遅延反復子を作成します。
  • レコードを操作する必要がある場合は、list(filter(...)) を使用して、結果のフィルター オブジェクトをリストにキャストします。
  • すべての偽の値 (None、0、空の文字列など) を除外するには、関数の引数として None を渡します。

よくある質問

filter() に渡された関数がブール値を返さなかった場合はどうなりますか?

Python は戻り値の真実性を評価します。ブール値のコンテキストで値が True と評価された場合、要素は保持されます。

filter() またはリスト内包表記を使用する必要がありますか?

読みやすさの観点から、if 条件を含むリスト内包表記 (例: [x for x in list ifcondition]) が好まれることがよくありますが、特に既存の組み込み関数を使用する場合、filter() はクリーンでパフォーマンスが高くなります。

関連トピック

推奨される Python リソース

関連するインタラクティブなチュートリアル、チートシート、コード比較で知識を深めてください。