《26》検索:メソッド count〈Python 2.x 版〉

実録:はじめてのプログラミング記事一覧
《26》検索:メソッド count

《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
2009年2月18日(水)

今日の進捗

  • Language Reference: Data model; Emulating container types
  • Python.use(better) -- セミナー研修テキスト
  • 連結リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 メールでペアプログラミングをするときには返信が戻るまでの時間が大切ですね。
担当:伊藤/本間 。(^^)

検索:メソッド count

組み込み型 list と同様に、連結リストに含まれる要素の出現頻度が得られると便利です。すると、

def ex():
    s = myList("as happy as happy can be")
    print s,"\t#",s.__class__.__name__
    for e in "python":
        print e,s.count(e)

>>> ex()
['a', 's', ' ', 'h', 'a', 'p', 'p', 'y', ' ', 'a', 's', ' ', 'h', 'a', 'p', 'p', 'y', ' ', 'c', 'a', 'n',
 ' ', 'b', 'e'] 	# myList
p 4
y 2
t 0
h 2
o 0
n 1

メソッド 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/13