初めてのPythonを読んでみる(4)
データ構造の話がしばらく続きます。今回はリストとディクショナリ。まさにPythonのキモの部分(俺が勝手にそう思っているだけだが)ですね。
- 6章 リストとディクショナリ
-
- 6.1
- リストは、オブジェクトを一定の順序で並べたもの
- インデックスを使って要素にアクセスできる
- 伸縮自在、リストをネストさせるのも可
- シーケンスの一種
- 正確には、オブジェクトリファレンスの配列
- 6.1
-
- 6.2
- 基本的な演算の挙動は文字列と似通っている(∵リストと文字列はシーケンスという点で共通)
- 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'
-
-
- 少し触ってみたが、特筆すべき点なし。
-
次回はタプル、ファイルオブジェクトなどの話です。