《28》挿入:メソッド insert〈Python 3.0 版〉
実録:はじめてのプログラミング《記事一覧》
《28》挿入:メソッド insert
《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
第3版♪2009/02/28 ● 2009年2月20日(金)
関連記事
挿入:メソッド insert
組み込み型 list と同様に、メソッド insert を利用して要素を挿入できると便利です。
def ex_insert():
for i in range(5):
X = 's = myList("ABC"); s'
print(">>>",X)
eval(compile(X,"","single"))
X = 's.insert({0},"_"); s'.format(i)
print(">>>",X)
eval(compile(X,"","single"))
その動作(仕様)を確認すると、
>>> ex_insert() >>> s = myList("ABC"); s ['A', 'B', 'C'] >>> s.insert(0,"_"); s ['_', 'A', 'B', 'C'] >>> s = myList("ABC"); s ['A', 'B', 'C'] >>> s.insert(1,"_"); s ['A', '_', 'B', 'C'] >>> s = myList("ABC"); s ['A', 'B', 'C'] >>> s.insert(2,"_"); s ['A', 'B', '_', 'C'] >>> s = myList("ABC"); s ['A', 'B', 'C'] >>> s.insert(3,"_"); s ['A', 'B', 'C', '_'] >>> s = myList("ABC"); s ['A', 'B', 'C'] >>> s.insert(4,"_"); s ['A', 'B', 'C', '_']
先頭からのオフセット値を指定して(その直前に)要素を追加できるのが分かります。また、範囲を越えるオフセット値を指定すると、その要素は末尾に追加されるのが分かります。たとえば、オフセット値 4 に相当する要素は存在しませんが、そのときには末尾の要素 'C' の後に続けて、新たな要素 '_' を追加します。
実現:メソッド insert
メソッド list.insert に準拠したものを実現します〈図解〉。
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/22