Python.use(better) #list: step07 -- def count

記事一覧

Python.use(better)
step07 -- def count

《著》小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28

事例:モジュールを起動する

■ 全項目を確認する

全ステップの「項目」を確認するには、関数 do を利用します。

$ python -i myList.py
>>> do()
...
 7: step07 -- def count(self, value)
■ 各項目を実行する

各ステップの「動作」を確認するには、関数 do の実引数を指定します。

>>> do(7)
...
>>> # ---------------------------------------- count
>>> s = myList("as happy as happy can be"); s
['a', 's', ' ', 'h', 'a', 'p', 'p', 'y', ' ', 'a', 's', ' ', 'h', 'a', 'p', 'p', 'y', ' ', 'c', 'a', 'n', ' ', 'b', 'e']
>>> s.count('p')
4
>>> s.count('y')
2
>>> s.count('t')
0
>>> s.count('h')
2
>>> s.count('o')
0
>>> s.count('n')
1
>>>

事例:コードの解説

def step07():
    """def count(self, value)"""

    class myList(object):
        def __iter__(self): ...

        def __contains__(self, value):          #1:
            return any(e==value for e in self)

        def count(self, value):              #2:
            n = 0
            for e in self:
                if e==value: n += 1
            return n

    ## ----------------------------------------
    tips = "__init__", "append", "__len__", "__contains__", "count",
    for e in tips:
        print(">>> #","-"*40,e)
        eval("ex_%s(SPEC, local)"%e)

《TIPS》メソッド __iter__ を定義すると、self と記述するだけで、それを実現する方法(how)に依存しない、抽象表現(what)が可能になります。

■ #1: 要素の帰属

メソッド __contains__ は、演算子 in に呼応して、その要素が含まれるかを判定します。

        def __contains__(self, value):           #1: BEFORE
            for e in self:
                if e==value: return True
            return False
  • 連結リスト self の各ノード e を順にたどりながら、value と同値なら、True をリターン値にします。
  • value と同値のノードが見つからないなら、False をリターン値にします。
        def __contains__(self, value):           #1: AFTER
            return any(e==value for e in self)
  • 連結リスト self の各ノード _ を順にたどりながら、その中のどれか any が value と同値かを判定します。
■ #2: 要素の出現頻度
        def count(self, value):              #2:
            n = 0
            for e in self:
                if e==value: n += 1
            return n

メソッド count は、value と同値になる、要素の出現頻度を与えます。

  • 連結リスト self の各ノード e を順にたどりながら、value と同値なら、変数 n の値をひとつずつ増やします。

》こちらに移動中です《
TOP


関連記事

Last updated♪2009/10/12