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

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

Pythonのfilter()関数は、リストなどのシーケンスから特定の条件に合う要素だけを抽出(フィルタリング)するための組み込み関数です。フィルタリングの条件は、別途定義した関数の中で記述します。まず条件を定めたユーザー定義関数を作成し、その関数と対象となるリストをfilter()関数に引数として渡すことで、条件を満たす要素だけを取得できます。

基本構文

filter(filter_function, sequence)

filter_functionには各要素を判定する関数を、sequenceにはリストやタプルなどのイテラブル(反復可能オブジェクト)を指定します。判定関数がTrueを返した要素だけが結果として残り、Falseを返した要素は除外されます。なお、Python 3ではfilter()はイテレータを返すため、結果を確認するにはlist()などで変換するか、forループで取り出します。

例1:リストから偶数を除外する

以下の例では、リスト内の偶数を見つけて除外し(Falseを返す)、残った奇数だけを出力しています。この関数を少し修正すれば、「3の倍数」「5の倍数」などを除外する処理にも簡単に応用できます。

num_list = [6, 17, 32, 11, 21, 132]
def remove_even(x):
    if x % 2 == 0:
        return False
    else:
        return True

odd_nos = filter(remove_even, num_list)
for x in odd_nos:
    print(x)

出力結果

上記のコードを実行すると、次のような結果が得られます。

17
11
21

例2:文字列から母音を抽出する

同じ考え方は、アルファベットのリストから母音だけを取り出したい場合にも使えます。判定関数内で母音のリストに含まれるかどうかをチェックし、含まれていればTrueを返します。

letters = ['t', 'u', 't', 'o', 'r', 'i', 'a', 'l', 's']
def get_vowels(c):
    if c in ['a', 'e', 'i', 'o', 'u']:
        return True
    else:
        return False

vowel_list = filter(get_vowels, letters)
for w in vowel_list:
    print(w)

出力結果

上記のコードを実行すると、次のような結果が得られます。

u
o
i
a

補足:lambda式でより簡潔に書く方法

単純な条件であれば、わざわざ関数を定義しなくてもlambda式を使えば1行で済みます。

odd_nos = filter(lambda x: x % 2 != 0, num_list)
print(list(odd_nos))  # [17, 11, 21]

このようにfilter()関数を使いこなせば、ループやif文を明示的に書かずとも、意図が明確で読みやすいコードでデータの絞り込みが行えます。

  1. Pythonのfilter()関数とは?基本構文と偶数抽出の具体例を解説

    Pythonのfilter()関数は、リストやタプルといったイテラブルの中から、指定した条件を満たす要素だけを取り出すための組み込み関数です。この記事では、実際にリストを用意して条件を適用し、特定の要素を選び出す方法を具体例とともにわかりやすく解説します。filter()の基本構文filter(function, iterable) function: イテラブルの各要素に対して実行される関数 iterable: フィルタリング対象のイテラブルfilter()は、第1引数に渡した関数を第2引数の各要素に順番に適用し、その結果がTrueになった要素のみを含むフィルタオブジェクト(イテレータ)を返

  2. Pythonのissubset()関数とは?部分集合の判定方法を実例付きで解説

    本記事では、Python標準ライブラリに用意されているissubset()関数の仕組みと使い方について詳しく解説します。 issubset()メソッドは、あるセット(集合)のすべての要素が、引数として渡した別のセットにも含まれている場合にブール値のTrueを返し、1つでも含まれていない要素があればFalseを返します。 下の図では、BはAの部分集合です。もしAとBが同一のセットであれば、両者は互いに部分集合の関係にあるといえます。つまり、両方のセットがまったく同じ要素を持っているということを意味します。 構文 <set 1>.issubset(<set 2>) 戻り値