You are here: Home > Dive Into Python > 組み込みのデータ型 > リストの紹介 | << >> | ||||
Dive Into PythonPython from novice to pro |
リストは Python の働き者のデータ型です. もし Visual Basic の配列や Powerbuilder のデータストア (なんと!) でしかリストに触ったことがないなら, 心して Python のリストに取り掛かってください.
Python のリストは Perl の配列に似ています. Perl では, 配列を格納する変数は必ず @ 文字から始まります. Python では変数名は任意であり, Python は内部的にデータ型を把握しています. |
Python のリストは Java の配列以上のものです (とはいえ, ただ単に配列のように使いたいのであれば, その通りに使えます). どちらかと言うと, 任意のオブジェクトを保持でき, 新しい要素が追加されたときに動的に拡張される ArrayList クラスに例える方が適切です. |
>>> li = ["a", "b", "mpilgrim", "z", "example"] >>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li[0] 'a' >>> li[4] 'example'
>>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li[-1] 'example' >>> li[-3] 'mpilgrim'
>>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li[1:3] ['b', 'mpilgrim'] >>> li[1:-1] ['b', 'mpilgrim', 'z'] >>> li[0:3] ['a', 'b', 'mpilgrim']
>>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li[:3] ['a', 'b', 'mpilgrim'] >>> li[3:] ['z', 'example'] >>> li[:] ['a', 'b', 'mpilgrim', 'z', 'example']
もし左のスライスインデックスが 0 だったらそこは空にしておけ, それが 0 を示すことになります. なので li[:3] はExample 3.8, “リストのスライス”の li[0:3] と同じです. | |
同様に, 右のスライスインデックスがリストの長さだったら, そこは空にしておけます. なので li[3:] は, リストが 5 つの要素を持っているので li[3: 5 ] と同じです. | |
ここでは対称性に注意しましょう. 長さ 5 のリストでは, li[:3] は最初の 3 要素を返し, li[3:] は最後の 2 要素を返します. 実際リストの長さに関わらず, li[:n] は常に最初の n 要素を返し, li[n:] は残りの要素を返します. | |
もし両方のスライスインデックスとも空にしておくと, 全ての要素を含んだリストが返ってきます. しかし, これは元のリスト li そのものではなく, 全く同じ要素を持つ新しいリストです. li[:] はリストの完全なコピーを作るための略記方法です. |
>>> li ['a', 'b', 'mpilgrim', 'z', 'example'] >>> li.append("new") >>> li ['a', 'b', 'mpilgrim', 'z', 'example', 'new'] >>> li.insert(2, "new") >>> li ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new'] >>> li.extend(["two", "elements"]) >>> li ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements']
>>> li = ['a', 'b', 'c'] >>> li.extend(['d', 'e', 'f']) >>> li ['a', 'b', 'c', 'd', 'e', 'f'] >>> len(li) 6 >>> li[-1] 'f' >>> li = ['a', 'b', 'c'] >>> li.append(['d', 'e', 'f']) >>> li ['a', 'b', 'c', ['d', 'e', 'f']] >>> len(li) 4 >>> li[-1] ['d', 'e', 'f']
>>> li ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements'] >>> li.index("example") 5 >>> li.index("new") 2 >>> li.index("c") Traceback (innermost last): File "<interactive input>", line 1, in ? ValueError: list.index(x): x not in list >>> "c" in li False
バージョン 2.2.1 以前, Python は専用の論理値用データ型を持っていませんでした. その代わりに, Python は (if 文のような) 論理値を期待する文脈で, 次のルールに従ってほとんどのものを受け入れていました.
|
>>> li ['a', 'b', 'new', 'mpilgrim', 'z', 'example', 'new', 'two', 'elements'] >>> li.remove("z") >>> li ['a', 'b', 'new', 'mpilgrim', 'example', 'new', 'two', 'elements'] >>> li.remove("new") >>> li ['a', 'b', 'mpilgrim', 'example', 'new', 'two', 'elements'] >>> li.remove("c") Traceback (innermost last): File "<interactive input>", line 1, in ? ValueError: list.remove(x): x not in list >>> li.pop() 'elements' >>> li ['a', 'b', 'mpilgrim', 'example', 'new', 'two']
>>> li = ['a', 'b', 'mpilgrim'] >>> li = li + ['example', 'new'] >>> li ['a', 'b', 'mpilgrim', 'example', 'new'] >>> li += ['two'] >>> li ['a', 'b', 'mpilgrim', 'example', 'new', 'two'] >>> li = [1, 2] * 3 >>> li [1, 2, 1, 2, 1, 2]
リストは + 演算子でも連結できます. list = list + otherlist は list.extend(otherlist) と同じ結果になります. しかし, extend が今あるリストを変更するのに対して, + 演算子は新しい (連結) されたリストを返します. これは extend の方が, 特に大きなリストで, 速いことを意味しています. | |
Python は += 演算子もサポートしています. li += ['two'] は li.extend(['two']) と同等です. += 演算子はリスト, 文字列, 整数に作用し, ユーザが定義したクラスに対しても作用するように, オーバーロードすることが可能です. (これについては 5 章 でさらに扱います.) | |
* 演算子は反復子としてリストに作用します. li = [1, 2] * 3 は li = [1, 2] + [1, 2] + [1, 2] と同等で, 3 つのリストを 1 つのリストに連結します. |
<< 組み込みのデータ型 |
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | |
タプルの紹介 >> |