Python|filter()でリストから条件に合う要素を抽出する

1. はじめに

Pythonでリストの中から特定の条件に合う要素だけを抽出したいときに便利なのが filter() 関数です。本記事では、「Python|filter()でリストから条件に合う要素を抽出する」というテーマで、初心者にもわかりやすく使い方や実践例を解説していきます。

filter()関数は、リストやタプルなどのイテラブル(繰り返し可能なオブジェクト)に対して条件を指定し、その条件を満たす要素だけを取り出すことができます。無駄なループ処理を減らすことができ、コードの可読性と効率性を高めることが可能です。

 

2. Pythonのfilter()関数とは?

filter()の基本構文と用途

Pythonのfilter()は、以下のような構文で使います。

filter(関数, イテラブル)

第一引数に「条件を定義した関数」、第二引数に「対象のイテラブル(例:リスト)」を渡します。filter()は条件を満たす要素のみを抽出し、filterオブジェクトを返しますので、list()でリストに変換するのが一般的です。

簡単な使用例

# 偶数だけを抽出する関数
def is_even(n):
    return n % 2 == 0

# 元のリスト
numbers = [1, 2, 3, 4, 5, 6]

# filterで偶数のみ抽出
even_numbers = list(filter(is_even, numbers))

print(even_numbers)

実行結果:

[2, 4, 6]

このように、条件を満たす要素(この場合は偶数)のみが抽出されました。

 

3. filter()のよくある使い方・応用例

lambda関数との組み合わせ

わざわざ関数を定義しなくても、lambda(無名関数)を使えば一行で条件を定義できます。

# 3の倍数のみ抽出
numbers = [1, 3, 4, 6, 9, 10, 12]

result = list(filter(lambda x: x % 3 == 0, numbers))

print(result)

実行結果:

[3, 6, 9, 12]

Noneを除去(空の要素を取り除く)

データクレンジングにもよく使われます。

data = ['apple', '', None, 'banana', 'cherry', '', None]

# 空文字列やNoneを除外
cleaned = list(filter(None, data))

print(cleaned)

実行結果:

['apple', 'banana', 'cherry']

辞書との組み合わせ(成績フィルタなど)

より実務的な例として、成績データから合格者だけを抽出します。

students = [
    {"name": "Alice", "score": 85},
    {"name": "Bob", "score": 58},
    {"name": "Charlie", "score": 72},
    {"name": "David", "score": 45}
]

# 合格点(60点以上)の学生のみ抽出
passed_students = list(filter(lambda student: student["score"] >= 60, students))

for student in passed_students:
    print(student["name"], student["score"])

実行結果:

Alice 85
Charlie 72

 

4. filter()の注意点・エラー対策

filterオブジェクトのままでは使えない

filter()の戻り値はfilterオブジェクトであり、リストやタプルのように直接使えない場合があります。リストに変換して使うことが多いです。

result = filter(lambda x: x > 0, [-2, -1, 0, 1, 2])

print(result)  # このままだと中身は見えない
print(list(result))  # リスト化すれば中身が見える

実行結果:

<filter object at 0x...>
[1, 2]

filterは一度しか使えない

filterオブジェクトはイテレータなので、1回しか繰り返せません。繰り返し使うには変換・保存が必要です。

 

5. まとめ

今回は「Python|filter()でリストから条件に合う要素を抽出する」というテーマで、filter関数の基本から応用まで丁寧に解説しました。

  • filter()は条件に合う要素だけを取り出すのに便利
  • lambda関数と組み合わせるとよりシンプルに書ける
  • 実務ではデータフィルタやクレンジング処理に活用できる

特にデータ分析や業務自動化において、filter()は非常に重宝される関数です。学習の際は、filterの出力を必ずリストに変換して確認する癖をつけると理解が深まります。

ぜひ、身の回りのリストやデータに応用して、自分だけのフィルタ処理を作ってみてください。

タイトルとURLをコピーしました