Python3のfilter関数について。
備忘録として基本的な使い方をまとめておく。
filterとは
filterとは、イテラブルなオブジェクトから引数で指定した関数の条件に合う要素だけを抽出する関数のこと。filterの書式
filter(関数, イテラブル)
次の例では、まず引数に与えられた数字が2で割り切れる場合にTrueを返すcheck_evenを定義している。
次に、forの中でfilterを使い、リストnumbersの要素から偶数のものだけを表示している。
numbers = [1, 2 ,3, 4, 5, 6, 7, 8, 9, 10]
def check_even(num):
return num % 2 == 0
for even in filter(check_even, numbers):
print(even)
#結果
2
4
6
8
10
filterをlambdaと使う
filterはlambda(無名関数)と一緒に使うこともできる。上記の偶数を表示するコードをlambdaを使って書き換えると以下の通りとなる。
numbers = [1, 2 ,3, 4, 5, 6, 7, 8, 9, 10]
for even in filter(lambda num: num % 2 == 0, numbers):
print(even)
リストに格納する
filter関数で抽出した要素で新たなリストを作るにはlist()を使う。numbers = [1, 2 ,3, 4, 5, 6, 7, 8, 9, 10]
evens = list(filter(lambda num: num % 2 == 0, numbers))
print(evens)
内包表記を使った書き方
上記では、filterで抽出した要素をlist()を使って新たなリストに格納したが、同じことはリストの内包表記を使ってもできる。numbers = [1, 2 ,3, 4, 5, 6, 7, 8, 9, 10]
evens = [even for even in numbers if even % 2 == 0]
print(evens)
以上、
filetrの使い方について
今回はここまで。
filterと内包表記の使い分けについては、色々な意見がある。
実行速度やネストして複雑になった時の可読性などを考慮する必要がある。
0 件のコメント :
コメントを投稿