Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonのfilter()関数とは?使い方を実例付きでわかりやすく解説

Pythonのfilter()メソッドは、リスト・セット・タプルなどのイテラブル(反復可能オブジェクト)から、指定した条件に合う要素だけを抽出するための組み込み関数です。条件に一致した要素のみを含む新しいイテレータを返します。


filter()関数とは

プログラミングをしていると、「リストの中から特定の条件に合う値だけを取り出したい」という場面によく出会います。例えば、クッキー店の注文リストから「チョコレート味の注文だけ」を抽出したい場合などが挙げられます。

こうした処理を実現できるのがPythonのfilter()メソッドです。あらかじめ定義した条件に基づいてリストを絞り込み、フィルタリング済みのデータをイテラブルとして返してくれます。

この記事では、filter()メソッドの基本的な使い方と、実際のコード例を通じてその活用方法を詳しく解説します。

filter()の基本構文

リストは、共通のテーマを持つ複数の値を格納できるPythonのデータ型です。例えば、洋服店の販売商品一覧や、プログラミング言語名の一覧などを保存できます。

リストを扱う際には、何らかの基準に従って要素を絞り込みたいことがよくあります。例えば、映画館を経営していて「18歳未満の来館者が何人いるか」を知りたいといったケースです。

filter()は組み込み関数なので、追加のインポートなしですぐに使えます。構文は以下のとおりです。

filter(function, iterable_object)

filter()メソッドは2つの引数を受け取ります。

  • function(必須):イテラブルの各要素に対して実行される関数です。この関数は各要素が条件を満たすかどうかを判定し、TrueまたはFalseを返します。
  • iterable_object(必須):フィルタリング対象となるオブジェクトです。

第2引数には、Pythonのlist(リスト)、set(セット)、tuple(タプル)など、任意のイテラブルを指定できます。

filter()の使用例①:在庫数のチェック

具体的な例を見てみましょう。雑誌売り場を運営していて、在庫の発注が必要かどうかを確認したいとします。ある雑誌の在庫が20冊未満であれば新たに発注し、20冊以上あれば発注は不要というルールです。現在の在庫数は次のリストに格納されています。

quantities = [25, 49, 21, 17, 14, 28]

def checkQuantities(mags):
    if mags < 20:
        return True
    else:
        return False

filtered_mags = filter(checkQuantities, quantities)
print(list(filtered_mags))

このコードを実行すると、次の出力が得られます。

[17, 14]

コードの内容を順番に見ていきましょう。

まず1行目で、各雑誌の在庫数を格納する変数quantitiesを定義しています。

次に、特定の雑誌の在庫が20冊未満かどうかを判定する関数checkQuantitiesを定義します。20冊未満であればTrueを返し、それ以外の場合はFalseを返します。

続いて、filter()メソッドを呼び出し、第1引数にcheckQuantities、第2引数にquantitiesを指定しています。これにより、リスト内のすべての要素に対してcheckQuantitiesが実行されます。

最後に、filter()の結果をlist()でリストに変換して出力しています。ここが重要なポイントです。filter()はリストではなくフィルタリング済みのイテレータオブジェクトを返すため、中身を確認するにはlist()などで明示的に変換する必要があります。

結果として17と14という2つの値が出力されました。どちらも20未満であるため、プログラムは意図したとおりに動作しています。

filter()の使用例②:年齢による抽出

もう一つ例を挙げます。ダンス教室の講師で、クラスに在籍する生徒のうち「7歳から10歳まで(7歳と10歳を含む)」の生徒の年齢を知りたいとしましょう。次のコードでこのデータを取得できます。

student_ages = [7, 9, 8, 10, 11, 11, 8, 9, 12]

def checkAges(ages):
    if ages >= 7 and ages <= 10:
        return True
    else:
        return False

filtered_ages = filter(checkAges, student_ages)
print(list(filtered_ages))

実行結果は次のとおりです。

[7, 9, 8, 10, 8, 9]

ご覧のとおり、7歳から10歳までの生徒だけがリストから抽出され、条件に合致しない11歳と12歳の生徒は除外されました。結果のリストには、フィルタリング後のデータのみが含まれています。

lambda式と組み合わせたfilter()の使い方

フィルタリング処理をさらに効率化したい場合は、lambda(ラムダ)式を活用できます。lambdaは名前を持たない特殊な関数で、Pythonでは短い1行の無名関数を記述するために使われます。

先ほどの雑誌の在庫数の例を思い出してください。あの例では「在庫が20冊未満かどうか」を判定する関数を別途定義し、それをfilter()でリストに適用しました。

同じ処理は、lambda式を使えばより簡潔に書けます。次のコードをご覧ください。

quantities = [25, 49, 21, 17, 14, 28]

filtered_mags = filter(lambda mag: mag < 20, quantities)
print(list(filtered_mags))

実行結果は先ほどと同じく[17, 14]ですが、コード量は大幅に減っています。

このように、関数全体を定義する代わりにlambda式で1行の関数を直接記述できます。この1行関数は「雑誌の在庫が20冊未満かどうか」を判定し、条件を満たす場合にTrueをfilter()のイテレータへ返します。実行後、プログラムは17と14という2つの値を含むリストを出力します。

まとめ

Pythonのfilter()関数を使えば、あらかじめ定義した条件に基づいてイテラブルオブジェクトを絞り込み、条件に合う要素だけを含む新しいイテラブルを取得できます。大量のデータの中から特定の基準を満たす値だけを取り出したい場合に非常に便利な関数です。

この記事では、filter()メソッドの構文と基本的な使い方を解説し、実際のコード例をいくつか紹介しました。さらに、lambda式と組み合わせることでコードをより簡潔に効率的にできることも確認しました。

これであなたも、Pythonエキスパートのようにfilter()を使いこなせるはずです。ぜひ自分のコードでも活用してみてください。

  1. Pythonインタープリターとは?仕組みと初心者向けオンライン環境を徹底解説

    Pythonは学びやすいプログラミング言語として知られています。その理由のひとつが、自分のマシンに正しいバージョンのPythonをインストールしなくても、オンラインで利用できるPythonインタープリターが数多く存在する点です。本記事では、Pythonインタープリターの仕組みについて解説し、初心者にも使いやすい人気のオンラインインタープリターをご紹介します。 Pythonプログラムはどのように実行されるのか? PythonはJavaと同様に、純粋なインタプリタ言語ともコンパイラ言語とも分類できず、両方の性質を併せ持っています。 ここでいう「コンパイル」とは、特定のプラットフォームに依存し

  2. Pythonのfilter()関数でデータをフィルタリングする方法

    プログラミングをしていると、「小さい方のリストの各要素が、大きい方のリストに含まれているかどうかを確認したい」「ある条件に合致する要素だけを抽出したい」といった場面によく出会います。そんなときに活躍するのが、Python組み込みのfilter()関数です。この記事では、filter()関数の基本的な構文から、実際のコード例、実行結果までをわかりやすく解説します。filter()関数の基本構文filter(function_name, sequence)各引数の意味は次のとおりです。function_name:フィルタリングの条件を定義した関数の名前。各要素に対して呼び出され、True を返した