Python.use(better) #list: step11 -- def insert

記事一覧

Python.use(better)
step11 -- def insert

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

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

■ 全項目を確認する

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

$ python myList.py
>>> do()
...
11: step11 -- def insert(self, index, item)
■ 各項目を実行する

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

>>> do(11)
...
>>> # ---------------------------------------- insert
>>> s = myList("ABC"); s, len(s)
(['A', 'B', 'C'], 3)
>>> s.insert(0,"_"); s, len(s)
(['_', 'A', 'B', 'C'], 4)
>>> s = myList("ABC"); s, len(s)
(['A', 'B', 'C'], 3)
>>> s.insert(1,"_"); s, len(s)
(['A', '_', 'B', 'C'], 4)
>>> s = myList("ABC"); s, len(s)
(['A', 'B', 'C'], 3)
>>> s.insert(2,"_"); s, len(s)
(['A', 'B', '_', 'C'], 4)
>>> s = myList("ABC"); s, len(s)
(['A', 'B', 'C'], 3)
>>> s.insert(3,"_"); s, len(s)
(['A', 'B', 'C', '_'], 4)
>>>

事例:コードの解説

def step11():
    """def insert(self, index, item)"""

    class myList(object):
        ...
        def insert(self, index, item):      #1:
            prev,node = self.head,self.head.next
            n = 0
            while node:
                if n==index:
                    prev.next = Node(item, prev.next)
                    break
                prev,node = node,node.next
                n += 1
            else:
                prev.next = Node(item, prev.next)

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

》こちらに移動中です《

■ #1: 要素の帰属

メソッド __setitem__ は、演算子 [] に呼応して、各要素の値を設定します。

        def insert(self, index, item):      #1:
            prev,node = self.head,self.head.next
            n = 0
            while node:
                if n==index:
                    prev.next = Node(item, prev.next)
                    break
                prev,node = node,node.next
                n += 1
            else:
                prev.next = Node(item, prev.next)
  • 連結リスト self の各ノード e を順にたどりながら、value と同値なら、True をリターン値にします。
  • value と同値のノードが見つからないなら、False をリターン値にします。
        def count(self, value):            #1: AFTER
            return sum(1 for e in self if e==value)
  • 連結リスト self の各ノード _ を順にたどりながら、その中のどれか any が value と同値かを判定します。

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


関連記事

Last updated♪2009/10/25