《28》挿入:メソッド insert〈Python 2.x 版〉

実録:はじめてのプログラミング記事一覧
《28》挿入:メソッド insert

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

今日の進捗

  • Language Reference: Numeric and Mathematical Modules; functools — Higher order functions and operations on callable objects
  • Python.use(better) -- セミナー研修テキスト
  • 連結リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 メールでのペアプログラミングも2週間すぎてやっと慣れてきた感じです。
担当:伊藤/本間 メールでも伝えたからここに書くまでもないけど、すぐに返信できないときもあるからそのときはゴメンね。from: 本間

挿入:メソッド insert

組み込み型 list と同様に、メソッド insert を利用して要素を挿入できると便利です。すると、

def ex():
    for i in range(5):
        s = myList("ABC")
        print "-->",s,i,"\t#",s.__class__.__name__
        s.insert(i,"_")
        print "<--",s,i,"\t#",s.__class__.__name__

>>> ex()
    • > ['A', 'B', 'C'] 0 # myList
<-- ['_', 'A', 'B', 'C'] 0 # myList
    • > ['A', 'B', 'C'] 1 # myList
<-- ['A', '_', 'B', 'C'] 1 # myList
    • > ['A', 'B', 'C'] 2 # myList
<-- ['A', 'B', '_', 'C'] 2 # myList
    • > ['A', 'B', 'C'] 3 # myList
<-- ['A', 'B', 'C', '_'] 3 # myList
    • > ['A', 'B', 'C'] 4 # myList
<-- ['A', 'B', 'C', '_'] 4 # myList

先頭からのオフセット値を指定して(その直前に)要素を追加できるのが分かります。また、範囲を越えるオフセット値を指定すると、その要素は末尾に追加されるのが分かります。たとえば、オフセット値 4 に相当する要素は存在しませんが、そのときには末尾の要素 'C' の後に続けて、新たな要素 '_' を追加します。

class myList(object):
    ...
    def insert(self, index, item):
        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)

指標(オフセット値)index を使って、連結リストに要素 item を挿入する様子を、図解〈関連記事〉とともに解説します。

Tips

ここでは、while ブロックに続く処理がないので、末尾の処理を else ブロックに記述する必要はありません。ここでは、複雑な後処理が必要になったときに備えて、あらかじめ else ブロックを用意しています。ただし、仕様変更に対するこの先行投資が無駄になる可能性もあります。《うさぎ》□

Last updated♪09/03/15