TL;DR
filter()は、イテラブルの要素を絞り込む。第一引数に関数、第二引数にイテラブルを指定する。イテラブル要素を順に関数に渡し判定する。関数は無名関数でもよい。
filter() のポイント
- 関数が True を返す要素のリストを返す
- イテラブルの中から指定条件に合致した要素を抽出する
- リストに変換可能
filter(function, iterable)
iterable はシーケンスか、反復をサポートするコンテナか、イテレータとなる。
filter() - 組み込み関数 — Python 3.9.4 ドキュメント
filter()だけではオブジェクトが返されるだけで数値は表示されないので、値を表示するときは、for か list を使う。
filter(関数, イテラブル)
# リストで出力
list(filter())
# 数値を出力
for hoge in filter(関数, x):
print(hoge)
関数を使って奇数を出力
関数を使うと以下のようになる。
def a(n):
return (n%2) == 1
b = [1, 2, 3, 4, 5, 6]
list(filter(a, b))
# [1, 3, 5]
lambda(ラムダ式)を使ってリストで出力する
3 より大きい数値をリストで出力してみよう。
x = (1, 2, 3, 4, 5)
list(filter(lambda i: i > 2, x))
[3, 4, 5]
lambda(ラムダ式)を使って偶数を出力する
for 文を使って、偶数を出力してみよう。
# 偶数を抽出する
x = [1, 2, 3, 4, 5, 6]
for hoge in filter(lambda i: i % 2 == 0, x):
print(hoge)
# 2
# 4
# 6
None
function が None なら iterable の偽である要素がすべて除去される。第一引数に None を渡すと真理値評価の結果で絞り込まれる。
a = [None, [], {}, 0, '', False, 1, 'A']
list(filter(None, a))
# [1, 'A']