《19》連結リスト課題〈Python 2.x 版〉

実録:はじめてのプログラミング記事一覧
《19》連結リスト課題

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

今日の進捗

  • Language Reference: Data model
  • Python.use(better) -- セミナー研修テキスト
  • 連結リスト課題を「続・ひよ子のきもち」で公開
Comment
本人:野中 今日から福岡でメールを使ってアドバイスを受けます。英文のドキュメントにも慣れてきました。
担当:伊藤/本間 Language Referenceにも目を通しておいてください。今回の課題では、重要な役割を占めるだけでなく、基本的な理解が不可欠になります。《うさぎ》

資料

No. title note
(4) The Python Language Reference — Python v3.0 documentation Download Python | Python.org から入手可能です。

連結リスト課題

デザインパターンを学習するための題材として、連結リストを作成します。また、組み込み型 list と同等の機能を実現することで、その理解を深めます。

def ex():
    s = list()          ; print s,"\t#",s.__class__.__name__
    for e in "ABC":
        s.append(e)     ; print s

>>> ex()
[] 	# list
['A']
['A', 'B']
['A', 'B', 'C']

組み込み型 list は、任意の要素からなるシーケンス(リスト)を扱うのに便利な機能を提供します。メソッド append は、指定した要素をリストの末尾に追加します。

def ex():
    s = myList()        ; print s,"\t#",s.__class__.__name__
    for e in "ABC":
        s.append(e)     ; print s

>>> ex()
[] 	# myList
['A']
['A', 'B']
['A', 'B', 'C']
>>> myList("ABC")
['A', 'B', 'C']

この課題で作成するクラス myList は、連結リストの概念を実現したもので、組み込み型 list に準拠します。そこで、この「連結リスト課題」では、list を利用できる状況ならいつでも、myList で代用できることを目指します。
連結リスト課題の仕様を確認したので、次回から、クラス myList が完成するまでの過程を紹介します。

class myList(object):
    def __init__(self):
        self.head = self.tail = Node()
    def append(self, item):
        node = Node(item, self.tail.next)
        self.tail.next = node
        self.tail = node
    def __str__(self):          # ver.1
        s = []
        node = self.head.next
        while node:
            s.append(repr(node.item))
            node = node.next
        return "[%s]"%", ".join(s)

クラス myList は、連結リストを実現したものです。メソッド __init__ は、クラス呼び出し myList() などに呼応して、生成したばかりのインスタンスを初期設定します。属性 .head が先頭のノードを、属性 .tail が末尾のノードを参照するとともに、各ノード(要素)を保持します。
メソッド __str__ は、組み込み関数 str に呼応します。組み込み型 list に準拠させるために、repr を利用します。組み込み関数 repr を利用すると、オブジェクトに固有の文字列表現が得られます。

class Node(object):
    def __init__(self, item=None, next=None):
        self.item = item
        self.next = next

クラス Node は、連結リストを構成する各ノードを実現したものです。属性 .item が各項目(要素)を保持するとともに、属性 .next を介して次のノードを参照します。

Tips

組み込み型 list に準拠するクラスを作成する過程を通して、list に関する理解を深めるとともに、プログラムだけではなく、プログラミングに関する理解を深めるのが、この課題の主目的です。それによって、プロダクト指向から「プロセス指向」への扉を開きます。《ひよ子》

Last updated♪09/03/10