Python の Map、Filter、Reduce 関数を理解する

Python には、データ処理タスクを簡素化できる関数型プログラミング ツールがいくつか用意されています。これらの中には、mapfilterreduce 関数があります。これらの関数を使用すると、データのコレクションに対して簡潔で読みやすい方法で操作を実行できます。この記事では、これらの各関数について説明し、効果的な使用方法を理解するのに役立つ例を示します。

map 関数

map 関数は、指定された関数を入力リスト (または任意の反復可能オブジェクト) 内のすべての項目に適用し、結果を生成する反復子を返します。これは、コレクション内の各要素に変換を適用する場合に特に便利です。

構文

map(function, iterable)

リスト内の各数値を二乗したいとします。これを実現するには、map を使用します。

# Define a function to square a number
def square(x):
    return x * x

# List of numbers
numbers = [1, 2, 3, 4, 5]

# Apply the function to each item in the list
squared_numbers = map(square, numbers)

# Convert the result to a list and print
print(list(squared_numbers))  # Output: [1, 4, 9, 16, 25]

filter 関数

filter 関数は、True または False を返す関数に基づいて反復可能オブジェクトから要素をフィルター処理するために使用されます。関数が True を返す要素のみが結果に含まれます。

構文

filter(function, iterable)

たとえば、リストから偶数だけを残したい場合は、filter を使用できます。

# Define a function to check if a number is even
def is_even(x):
    return x % 2 == 0

# List of numbers
numbers = [1, 2, 3, 4, 5]

# Filter the list using the function
even_numbers = filter(is_even, numbers)

# Convert the result to a list and print
print(list(even_numbers))  # Output: [2, 4]

reduce 関数

functools モジュールの一部である reduce 関数は、反復可能オブジェクトの項目にバイナリ関数を左から右へ累積的に適用し、反復可能オブジェクトを単一の値に減らします。

構文

from functools import reduce

reduce(function, iterable[, initializer])

たとえば、リスト内のすべての数値の積を求めるには、reduce を使用します。

from functools import reduce

# Define a function to multiply two numbers
def multiply(x, y):
    return x * y

# List of numbers
numbers = [1, 2, 3, 4, 5]

# Reduce the list using the function
product = reduce(multiply, numbers)

# Print the result
print(product)  # Output: 120

結論

mapfilterreduce 関数は、Python での関数型プログラミングのための強力なツールです。これらは、変換の適用、データのフィルタリング、コレクションを単一の値に削減するための優れたソリューションを提供します。これらの関数を習得することで、さまざまなデータ処理タスクに対して、より簡潔で表現力豊かなコードを記述できます。