PYTHON MEBY

Pythonでリストの要素をフィルタリング(filter, リスト内包表記)

この記事では、Pythonでリストの要素をフィルタリングする方法について説明します。filter関数とリスト内包表記の2つの方法を例を用いて解説します。

目次

filter関数によるフィルタリング

Pythonの組み込み関数`filter()`は、イテラブルオブジェクト(リストなど)の要素を、指定された関数でフィルタリングします。`filter()`関数は、フィルタリング条件を満たす要素のみを含むイテラブルオブジェクトを返します。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def is_even(n):
    return n % 2 == 0
even_numbers = list(filter(is_even, numbers))
print(even_numbers)  # 出力: [2, 4, 6, 8, 10]

上記の例では、`is_even()`関数は、偶数の数値をチェックし、`filter()`関数は`numbers`リストから偶数のみを抽出します。`list()`関数を使って、`filter`オブジェクトをリストに変換しています。

words = ['apple', 'banana', 'cherry', 'date']
def starts_with_a(word):
    return word.startswith('a')
a_words = list(filter(starts_with_a, words))
print(a_words) # 出力: ['apple']

リスト内包表記によるフィルタリング

リスト内包表記は、リストをより簡潔に作成する方法です。フィルタリングを行う場合、条件式をリスト内包表記に含めることができます。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = [n for n in numbers if n % 2 == 0]
print(even_numbers)  # 出力: [2, 4, 6, 8, 10]

この例では、リスト内包表記を使って、`numbers`リストから偶数のみを抽出し、新しいリスト`even_numbers`を作成しています。`filter()`関数よりも簡潔で、読みやすいコードになります。

words = ['apple', 'banana', 'cherry', 'date']
a_words = [word for word in words if word.startswith('a')]
print(a_words) # 出力: ['apple']

どちらの方法を使うべきか?

多くの場合、リスト内包表記の方が`filter()`関数よりも簡潔で、読みやすいコードになります。特に、フィルタリング条件が単純な場合は、リスト内包表記が推奨されます。 しかし、フィルタリング条件が複雑な場合や、複数のフィルタリング条件を組み合わせる必要がある場合は、`filter()`関数のほうが可読性が高くなることがあります。 最終的には、コードの可読性と保守性を考慮して、適切な方法を選択する必要があります。

関連記事