データ構造


そうとう昔になるがアルゴリズムとデータ構造という本で勉強した。今は言語に組み込みのデータ構造が充実しているので意識する必要が少なくなっているかもしれない。

配列

他の言語でよくある、hoge[10] のようなものはなく、リストを使う。(リストの要素は、hoge[10] のようにアクセスできる。)

リスト – list

>>> a=[1,2,3]
>>> print(a)
[1, 2, 3]
>>> print(a[2])
3
>>> a=[1,"2",3.0]
>>> print(a)
[1, '2', 3.0]
>>> c=[i for i in range(0,10)]
>>> print(c)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> d=[i for i in range(0,10) if i % 3 == 0]
>>> d
[0, 3, 6, 9]

辞書(連想配列、ハッシュ、マップ、マッピング型) – dict

使用例は、上記チュートリアルを参照。

タプル – tuple

(1,2,3) のように表現しているもの。リストと同じようにも思えるが、タプルの中身はリストと違って変更できない。

>>> print('%d %d' % (1,2))
1 2
>>> a=(1,2,3)
>>> a
(1, 2, 3)
>>> a[0]
1
>>> a[1]
2
>>> a[0]=3
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> tuple([1,2,3])
(1, 2, 3)

集合 – set

通常の用途には、帰属テスト、シーケンスからの重複除去、積集合、和集合、差集合、対称差 (排他的論理和) のような数学的演算の計算が含まれます。

https://docs.python.jp/3/library/stdtypes.html#set-types-set-frozenset

>>> a=set([1,2,3])
>>> a
{1, 2, 3}
>>> b=set([3,4,5])
>>> b
{3, 4, 5}
>>> a&b
{3}
>>> a|b
{1, 2, 3, 4, 5}
>>> a-b
{1, 2}
>>> a^b
{1, 2, 4, 5}
>>> 3 in a
True
>>> 5 in a
False
>>> set([1,2,3,3,4])
{1, 2, 3, 4}

その他

例えば、クラスインスタンスを == で比較するには、__eq__() を、+ で足し算するには、__add__ を定義。