《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 を参照する手段には依存しない(情報隠蔽の原則に沿って)抽象的な表現ができるのも〈GoFIterator パターンの効用のひとつです。■

受講者への課題

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