pilot python Fl.2 - data structure (1) -
禅の言葉が拠り所の tmorimoto です。「善を思わず 悪を思わず」という言葉があります。私の家は浄土宗(多分(^ ^;;)で、法要の際、お坊さんと一緒に親戚一同で般若心経を唱えます。その中で「不思善 不思悪」と唱えていて、昔から知っていた言葉だったのだなと、最近気付きました。
WEB+DB PRESS Vol.42 で「アルゴリズム&データ構造入門」という特集があります。
Java と Ruby で実現方法を解説しているので、便乗して Python でもやってみます。この手の話題は、何となく概念は分かるけれど、どうやって書いたら良いのか分からない時があります。最近の言語だと、組み込み関数やライブラリが充実しているので容易に実現できます。
- リスト
>>> L1 = []
>>> L2 = ['redhat', 'suse', 'asianux']
>>> L3 = ['Fedora', 'Ubuntu', 'Gentoo']
>>>
>>> L1
[]
>>> L2
['redhat', 'suse', 'asianux']
>>> L2 + L3
['redhat', 'suse', 'asianux', 'Fedora', 'Ubuntu', 'Gentoo']
- スタック(LIFO)
>>> Stack = ['redhat', 'suse', 'asianux']
>>>
>>> Stack
['redhat', 'suse', 'asianux']
>>> Stack.append('Fedora')
>>> Stack
['redhat', 'suse', 'asianux', 'Fedora']
>>> print Stack.pop()
Fedora
>>> Stack.extend(['Ubuntu', 'Gentoo'])
>>> Stack
['redhat', 'suse', 'asianux', 'Ubuntu', 'Gentoo']
>>> print Stack.pop()
Gentoo
>>> Stack
['redhat', 'suse', 'asianux', 'Ubuntu']
- キュー(FIFO)
>>> Queue = ['redhat', 'suse', 'asianux']
>>>
>>> Queue
['redhat', 'suse', 'asianux']
>>> Queue.append('Fedora')
>>> Queue
['redhat', 'suse', 'asianux', 'Fedora']
>>> print Queue.pop(0)
redhat
>>> Queue.extend(['Ubuntu', 'Gentoo'])
>>> Queue
['suse', 'asianux', 'Fedora', 'Ubuntu', 'Gentoo']
>>> print Queue.pop(0)
suse
>>> Queue
['asianux', 'Fedora', 'Ubuntu', 'Gentoo']
- ディクショナリ(ハッシュ)
>>> Hash = {'redhat':'RHEL', 'suse':'SLES', 'asianux':'AXS'}
>>>
>>> Hash
{'asianux': 'AXS', 'suse': 'SLES', 'redhat': 'RHEL'}
>>> Hash.keys()
['asianux', 'suse', 'redhat']
>>> Hash.items()
[('asianux', 'AXS'), ('suse', 'SLES'), ('redhat', 'RHEL')]
>>> Hash.get('asianux')
'AXS'
>>> Hash['Fedora'] = 'FC'
>>> Hash.items()
[('asianux', 'AXS'), ('suse', 'SLES'), ('Fedora', 'FC'), ('redhat', 'RHEL')]
言葉の定義ですが、オブジェクトの集合を表現するデータ構造や抽象データ型、クラスをコンテナ又はコレクションと呼びます。また Python のリストやディクショナリを「コレクション型」のオブジェクトと呼びます。
次回は、ツリー(Tree)構造をやります。




コメント