Pythonのfilter関数とreduce関数の違い

Pythonのfilter()関数とreduce()関数は、リストや他のイテラブルを操作するための異なる目的を持つ組み込み関数です。以下にそれらの主な違いを示します:

  1. 目的:

    • filter()関数: フィルタリングを行います。指定された条件に合致する要素を抽出し、新しいイテラブルを生成します。条件を満たす要素だけを選別します。

    • reduce()関数: 要素の集計を行います。イテラブル内の要素を組み合わせて、単一の値を生成します。リスト内の要素を畳み込んで結果を得るのに使用します。

  2. 引数の数:

    • filter()関数: 2つの引数を受け取ります。1つ目はフィルタリング条件を評価する関数で、2つ目は対象のイテラブルです。条件を満たす要素を抽出します。

    • reduce()関数: 2つの引数を受け取ります。1つ目は2つの要素を結合する関数(通常は累積関数)で、2つ目は対象のイテラブルです。要素の累積を計算します。

  3. 戻り値:

    • filter()関数: 条件を満たす要素を含む新しいイテラブル(通常はフィルタリングされた要素のリスト)を返します。

    • reduce()関数: 最終的な累積結果を返します。通常はリスト内の要素を累積して単一の値を返します。

  4. 使用例:

    • filter()関数: 条件に合致する要素を抽出する場面で主に使用されます。例えば、整数リスト内の偶数を抽出したり、文字列リスト内の特定の条件を満たす要素を抽出したりする際に使用されます。

    • reduce()関数: リスト内の要素を組み合わせて集計を行う場面で使用されます。例えば、整数リスト内の要素を合計する、要素を連結する、最大値を求めるなどの操作に使用されます。

以下はfilter()reduce()の使用例の比較です:

python
from functools import reduce # filter()の使用例 numbers = [1, 2, 3, 4, 5, 6, 7, 8] even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) # reduce()の使用例 total = reduce(lambda x, y: x + y, numbers)

filter()は要素の選別に、reduce()は要素の集計に使用されます。どちらを使用するかは、タスクの性質に依存し、目的に合わせて選択されます。