《33》整列:メソッド reverse〈Python 2.x 版〉
実録:はじめてのプログラミング《記事一覧》
《33》整列:メソッド reverse
《著》小粒ちゃん+α《監修》小泉ひよ子とタマゴ倶楽部
2009年2月27日(金)
関連記事
今日の進捗
- Language Reference: Numeric and Mathematical Modules; functools — Higher order functions and operations on callable objects
- Python.use(better) -- セミナー研修テキスト
- 連結リスト課題を「続・ひよ子のきもち」で公開
Comment | |
---|---|
本人:野中 | 暫定版のようにリストを連結するのと違ってひとつずつ順序を逆転させるのは大変ですね。 |
担当:伊藤/本間 | 。(^^) |
整列:メソッド reverse
組み込み型 list と同様に、メソッド reverse を利用してリスト内の順序を反転できると便利です。すると、
def ex(): for s in myList(""),myList("ABC"): print "-->",s ,"\t#",s.__class__.__name__,id(s) s.reverse() print "<--",s ,"\t#",s.__class__.__name__,id(s) >>> ex()
-
- > [] # myList 13509872
-
- > ['A', 'B', 'C'] # myList 13510384
各ノードの順序(オフセット位置)を反転させるとともに、各要素の値が逆順に得られるのが分かります。また、組み込み関数 id を利用すると(副作用を期待して)メソッド reverse を適用した前後で、同じオブジェクトを参照しているのを確認できます。
class myList(object): ... def reverse(self): s = myList() for e in self: s.insert(0,e) self.head = self.tail self.extend(s)
まず、新たな空リスト myList() を用意した後で(メソッド insert を使って)各要素を先頭に挿入することで、順序を反転したリスト s が得られます。次に、先頭のノード self.head は、末尾のノード self.tail と同じ値に再設定します。すると(見せかけだけは)空のリストになります。最後に(メソッド extend を使って)空リストの末尾に、反転したリスト s を連結させます。
受講者への課題
新たなオブジェクト myList() を作成せずに、連結リストの内部構造を変化させるだけで、各要素の順序を反転させるとともに、
def reverse(self):
...
その長所/短所について考察してくたさい。□