タプル、リスト、デクト

Pythonにはデータを作成する際に便利な構造が沢山?あります。

>>> t = ()
>>> l = []
>>> d = {}
>>> dir(t) 
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__g
t__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mul_
_', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmul__',
'__setattr__', '__str__']
>>> dir(l)
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
ce__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gets
lice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__iter__', '
__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__r
educe_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__
', '__setslice__', '__str__', 'append', 'count', 'extend', 'index', 'insert', 'p
op', 'remove', 'reverse', 'sort']
>>> dir(d)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__'
, '__eq__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '
__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__re
duce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__str__', '
clear', 'copy', 'fromkeys', 'get', 'has_key', 'items', 'iteritems', 'iterkeys',
'itervalues', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

よく利用するのは、リスト(list)とデクト(dict)だと思う。タプル(tuple)はリストからリストを操作する機能を取り除いた構造と考えて良いと思う。タプルってどこで利用すればいいのかな?タプルでできる事は全てリストでできると思うのだが、さらに操作性を考えるとリストの方が利用しやすいと思うのだが。タプルの使いどころがわからない。また、タプルを使う事によって得られるメリットとかあるの?なんだろうね。

デクトは良く言われるのはハッシュとか連想配列とかと同じもの。文字列をキーにして値を取得できるデータ型だね。

>>> l = ["a", "b", "c", "d"]
>>> for i in l:
...   print(i)
...
a
b
c
d
>>> print("\n".join(l))
a
b
c
d

なるほど

>>> d = {
...   "one"  : "Ichi",
...   "two"  : "Ni",
...   "three": "San"
... }
>>> for k, v in d.items():
...   print("%s=%s" % (k, v))
...
three=San
two=Ni
one=Ichi

順番は保存されていないね。そうそう、「range()」ってのは便利だ。

>>> for i in rrange(5):
...   print i
...
0
1
2
3
4
>>> li = ["a", "b", "c", "d", "e"]
>>> for i in range(len(li)):
...   print(li[i])
...
a
b
c
d
e

便利だ。

あと、こんな事もできる。これにはちょっとビックリした。

>>> data = {
...   "Tom": (96, 88, 92, "All-Round"),
...   "Sam": (13, 96, 31, "Defensive"),
...   "Fin": (89, 19, 92, "Offensive")
... }
>>> for name, (offense, defense, mental, comm) in data.items():
...   print("%s: %d-%d-%d %s" % (name, offense, defense, mental, comm))
...
Fin: 89-19-92 Offensive
Sam: 13-96-31 Defensive
Tom: 96-88-92 All-Round
>>>

めっちゃ便利だ。