《26》検索:メソッド count〈Python 3.0 版〉
実録:はじめてのプログラミング《記事一覧》
《26》検索:メソッド count
《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
第3版♪2009/02/28 ● 2009年2月18日(水)
関連記事
検索:メソッド count
組み込み型 list と同様に、メソッド count を利用して各要素の出現頻度が得られると便利です。すると、
def ex_count(): X = 's = myList("as happy as happy can be")' print(">>>",X) eval(compile(X,"","single")) for e in "python": X = "s.count({0!r})".format(e) print(">>>",X) print(eval(X)) >>> ex_count() >>> s = myList("as happy as happy can be") >>> s.count('p') 4 >>> s.count('y') 2 >>> s.count('t') 0 >>> s.count('h') 2 >>> s.count('o') 0 >>> s.count('n') 1
引数に指定した各要素の出現頻度が得られます。
実現:メソッド count
メソッド list.count に準拠したものを実現します。
class myList(object): ... def count(self, value): return reduce(lambda n,e: n+(e==value), self, 0)
シーケンス内の要素 e が引数 value と同じ値になるとき、その真偽値 True は、整数 1 として評価されます。組み込み関数 reduce を利用すると、このように簡潔に表現できます。
《Note》(次の課題で示す)for 文を使ったものと比べて、より簡潔に表現できるのが分かります。ただ self と記述するだけで、各要素 e を参照する手段には依存しない(情報隠蔽の原則に沿って)抽象的な表現ができるのも〈GoF〉Iterator パターンの効用のひとつです。■
受講者への課題
for 文を利用すると、次のようになります。
def count(self, value): n = 0 for e in self: if e==value: n += 1 return n
reduce 版と比較して、その長所/短所について考察してくたさい。■
Tips
Last updated♪09/03/20