初めてのPythonを読んでみる(4)

データ構造の話がしばらく続きます。今回はリストとディクショナリ。まさにPythonのキモの部分(俺が勝手にそう思っているだけだが)ですね。

  • 6章 リストとディクショナリ
    • 6.1
      • リストは、オブジェクトを一定の順序で並べたもの
      • インデックスを使って要素にアクセスできる
      • 伸縮自在、リストをネストさせるのも可
      • シーケンスの一種
      • 正確には、オブジェクトリファレンスの配列
    • 6.2
      • 基本的な演算の挙動は文字列と似通っている(∵リストと文字列はシーケンスという点で共通)
>>> len([1,2,3])
3
>>> [1,2,3] + [4,5]
[1, 2, 3, 4, 5]
>>> [1,2,3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> for x in [1,2,3]:
...     print x,
...
1 2 3
      • +演算子で結合する時、オペランドの型は同じでなくてはならない
      • 例えば、文字列とリストは結合できない
>>> [1,2] + "34"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list
>>> `[1,2]` + "34"
'[1, 2]34'
>>> [1,2] + list("34")
[1, 2, '3', '4']
      • リストに対しての変更操作は破壊的である
      • L.append(x) と L+[x] は似て非なるもの(前者は破壊的、後者はそうでない)
>>> L = [1,3,5,7]
>>> L+[20]
[1, 3, 5, 7, 20]
>>> L
[1, 3, 5, 7]
>>> L.append(20)
>>> L
[1, 3, 5, 7, 20]
      • append と pop を使ってスタックを実現可能
>>> stack = []
>>> stack.append(10)
>>> stack.append(20)
>>> stack.pop()
20
>>> stack.append(5)
>>> stack.pop()
5
>>> stack.pop()
10
>>> stack.pop()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: pop from empty list
      • スライシングしたものに空のリストを代入すると、その範囲は削除される
      • ただし、リストの特定の箇所に空のリストを代入するコードを書くと、要素の削除ではなく空のリストに置き換えられる。スライシングと挙動が違うので注意
>>> L = ['hoge', 'fuga', 'piyo']
>>> L
['hoge', 'fuga', 'piyo']
>>> L[0] = []
>>> L
[[], 'fuga', 'piyo']
>>> L[1:]
['fuga', 'piyo']
>>> L[1:] = []
>>> L
[[]]
>>>
>>> L = ['hoge', 'fuga', 'piyo']
>>> L[1:2]
['fuga']
>>> L[1:2] = []
>>> L
['hoge', 'piyo']
>>> d = {}
>>> d
{}
>>> d = {1:1,2:2,3:3}
>>> d
{1: 1, 2: 2, 3: 3}
>>> d[1]
1
>>> d['1']
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
KeyError: '1'
>>> d
{1: 1, 2: 2, 3: 3}
>>> d[3]
3
>>> d
{1: 1, 2: 2, 3: 3}
>>> d.keys()
[1, 2, 3]
>>> d.has_key(5)
False
>>> d.has_key(1)
True
>>> d.values()
[1, 2, 3]
>>> d.items()
[(1, 1), (2, 2), (3, 3)]
>>> d.get(1)
1
>>> d.get('1')
>>> d.get('1', 'nothing')
'nothing'
      • 少し触ってみたが、特筆すべき点なし。

次回はタプル、ファイルオブジェクトなどの話です。