Python filter関数

Python

今回はPythonの「filter関数」について取り上げていきます。

見慣れない方もいると思いますが、意外と使えるものなのでこれを機に使ってみてください。

前置き長くしても仕方がないので、早速みていきましょう!

filter関数とは

ますは「filter関数」が何かを説明します。

filter関数」とは、Pythonに標準で組み込まれている関数で、リストなどの配列から条件に一致するもののみ取り出すことができる関数です。

説明だけ聞いてもパッとしないと思うので、早速みていきましょう。

filter関数

filter関数」は、以下のような形で使います。

filter(条件式, 配列)

第一引数に条件式を入れ、第二引数にリストやタプルなどの配列を入れます。

では早速実際にやってみましょう。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def even(number):
    if number % 2 == 0:
        return number
    
result = filter(even, numbers)

even関数」は偶数のみ返します。

if number % 2 == 0」は「2で割った時にあまりが0の数」のことです。

つまり偶数ですね。

filter(even, numbers)」では、「numbers」の要素を1つずつ「even関数」に渡しています。

では「result」の中身を見てみましょう!

print(result)

# <filter at 0x7fca9118a580>

あれ?想定外のものが出力されてしまいました。

これは「fileterオブジェクト」というものです。

filter」のオブジェクトでデータのアドレスが「0x7fca9118a580」というものです。

オブジェクト」とは、Pythonで書いたプログラムが操作したり、処理したりするデータのことです。

ではどんなものが中にあるかみていきましょう。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def even(number):
    if number % 2 == 0:
        return number
    
result = filter(even, numbers)

for i in result:
    print(i)

# 2
# 4
# 6
# 8
# 10

先ほどの「filterオブジェクト」の中には「2, 4, 6, 8, 10」と偶数のみが入っていますね。

ただこれだと正直使いにくいですよね。

for文で出力せずにリスト型で出力しましょう。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

def even(number):
    if number % 2 == 0:
        return number
    
result = list(filter(even, numbers))
print(result)

# [2, 4, 6, 8, 10]

「list()」で囲むことで、リストで出力することができましたね。

これで使い方はだんだんわかってきたと思います。

最後に「ラムダ関数」を用いて簡潔に書いていきましょう。

ラムダ関数」とは、簡単に言えば、「使い捨て関数」です。

普通関数は使い回すことができますが、中には一回しか使わないものも出てきます。

そんな関数を「もっと簡単に書こうよ!」ということを実現したものと認識してください。

では早速みていきましょう。

numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
result = list(filter(lambda number: number % 2 == 0, numbers))
print(result)

# [2, 4, 6, 8, 10]

一気にコードが短くなりましたね。

lambda number: number % 2 == 0」の部分が「ラムダ関数」です。

numbers」の要素が1つずつ「number」に入り、「2で割った結果が0になる、つまり偶数のみを返す」というコードになります。

これで「filter関数」はマスターできましたね!

最後に

今回は「filter関数」についてみてきました。

一番最後は「ラムダ関数」も使用したので難しかったと思いますが、使い方を理解できたと思います。

使用できる機会もあると思うので、ぜひ使用してみてください!

何か質問などがあればTwitterのDMやここのコメントで聞いてください!

それでは!

コメント

タイトルとURLをコピーしました