ちゅ〜とりある (@.@) 組み込み関数 filter
Python.use(better, for=C#) 《記事一覧》
組み込み関数 filter
《関連記事》
- Python はじめました:組み込み関数 filter - 続・ひよ子のきもち〈Python 3.0 版〉
- 2008-07-21 ソースコードの歩き方《IronPython》filter
- select:/Smalltalk → Smalltalk use: better《25》これは要るけどこのほうがいいかな
- select 演算/OCL → Java.use(better) NITRIS 問題《10》でもここなら置けますよ
- ハッシュ表 → Python.use(better, by="K&R") # for novice《40》辞書:キーと値
組み込み関数: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 に適用すると、指定した条件を満たす文字だけからなる「リスト」が得られます。これは、辞書のキー要素だけが、対象になるからです。ジェネレーター式を使って、指定した条件を満たすキーを含む要素対だけからなる「辞書」が得られます。