ちゅ〜とりある (@.@) 組み込み関数 filter

Python.use(better, for=C#) 記事一覧
組み込み関数 filter

《著》後藤いるか・森こねこ《監修》小泉ひよ子とタマゴ倶楽部
第0版♪1988/03/30 ● 第1版♪2000/05/23 ● 更新♪2008/10/28

組み込み関数:filter

まず、組み込み関数 filter のヘルプ情報を確認します。

>>> help(filter)
Help on built-in function filter in module __builtin__:

filter(...)
    filter(function or None, sequence) -> list, tuple, or string
    
    Return those items of sequence for which function(item) is true.  If
    function is None, return the items that are true.  If sequence is a tuple
    or string, return the same type, else return a list.

組み込み関数 filter を適用すると、つねに list が得られます。

《Note》 組み込み関数 filter は、初期の Python から導入されています。collect:/Smalltalk のような汎用性はありませんが、軽微な問題解決を図りたいときには重宝します。また、OCL にも、同様の collect 操作が規定されています。□

例題を使って、その動作を確認してみましょう。

事例:filter

>>> filter(lambda e: ord(e)%2, "ABCDE")
'ACE'

組み込み関数 filter を、str に適用すると、指定した条件を満たす文字だけからなる「文字列」が得られます。

>>> filter(lambda e: ord(e)%2, list("ABCDE"))
['A', 'C', 'E']
>>> [e for e in "ABCDE" if ord(e)%2]
['A', 'C', 'E']

組み込み関数 filter を、list に適用すると、指定した条件を満たす文字だけからなる「リスト」が得られます。リストの内包を使っても、同じ結果が得られます。

>>> filter(lambda e: ord(e)%2, tuple("ABCDE"))
('A', 'C', 'E')
>>> tuple(e for e in "ABCDE" if ord(e)%2)
('A', 'C', 'E')

組み込み関数 filter を、tuple に適用すると、指定した条件を満たす文字だけからなる「タプル」が得られます。ジェネレーター式を使っても、同じ結果が得られます。

>>> filter(lambda e: ord(e)%2, dict((e,ord(e)) for e in "ABCDE"))
['A', 'C', 'E']
>>> dict((e,ord(e)) for e in "ABCDE" if ord(e)%2)
{'A': 65, 'C': 67, 'E': 69}

組み込み関数 filter を、dict に適用すると、指定した条件を満たす文字だけからなる「リスト」が得られます。これは、辞書のキー要素だけが、対象になるからです。ジェネレーター式を使って、指定した条件を満たすキーを含む要素対だけからなる「辞書」が得られます。

>>> filter(lambda e: ord(e)%2, set("ABCDE"))
['A', 'C', 'E']
>>> set(e for e in "ABCDE" if ord(e)%2)
set(['A', 'C', 'E'])

組み込み関数 filter を、dict に適用すると、指定した条件を満たす文字だけからなる「リスト」が得られます。これは、辞書のキー要素だけが、対象になるからです。ジェネレーター式を使って、指定した条件を満たすキーを含む要素対だけからなる「辞書」が得られます。



Last updated♪09/03/08