2.3.6 配列型

組み込み型には 6 つの配列型があります: 文字列、ユニコード文字列、 リスト、タプル、バッファ、そして xrange オブジェクトです。

文字列リテラルは 'xyzzy'、"frobozz" といったように、 単引用符または二重引用符の中に書かれます。 文字列リテラルについての詳細はは、 Python リファレンスマニュアル の第 2 章を読んで下さい。 Unicode 文字列はほとんど文字列と同じですが、u'abc' 、 u"def" といったように先頭に文字 "u" を付けて 指定します。 リストは [a, b, c] のように要素をコンマで区切り角括弧で 囲って生成します。タプルは a, b, c のようにコンマ演算子で 区切って生成します (角括弧の中には入れません)。 丸括弧で囲っても囲わなくてもかまいませんが、空のタプルは () のように丸括弧で囲わなければなりません。 要素が一つのタプルでは、例えば (d,) のように、要素の後ろに コンマをつけなければなりません。

バッファオブジェクトは Python の構文上では直接サポートされていませんが、 組み込み関数 buffer() で生成することができます。バッファオブジェクトは結合や反復をサポート していません。

xrange オブジェクトは、オブジェクトを生成するための特殊な構文がない 点でバッファに似ていて、関数 xrange()で生成します。 xrange オブジェクトはスライス、結合、反復をサポートせず、 in 、 not in 、min() または max() は効率的ではありません。

ほとんどの配列型は以下の演算操作をサポートします。"in" および "not in" は比較演算と同じ優先度を持っています。 "+" および "*" は対応する数値演算と同じ優先度です。 2.8

以下のテーブルは配列型の演算を優先度の低いものから順に挙げたものです (同じボックス内の演算は同じ優先度です)。テーブル内の s および t は同じ型の配列です; n、i および j は整数です:

演算  結果  注釈 
x in s s のある要素 x と等しい場合 1 、そうでない場合 0 (1)
x not in s s のある要素が x と等しい場合 0 、そうでない場合 1 (1)
s + t s および t の結合  
s * n , n * s s の浅いコピー n 個からなる結合 (2)
s[i] s の 0 から数えて i 番目の要素 (3)
s[i:j] s の i 番目から j 番目までのスライス (3), (4)
s[i:j:k] s の i 番目から j 番目まで、k 毎のスライス (3), (5)
len(s) s の長さ  
min(s) s の最小の要素  
max(s) s の最大の要素  

注釈:

(1)
s が文字列または Unicode 文字列の場合、 演算操作 in および not in は部分文字列の一致テスト と同じように動作します。バージョン 2.3 以前の Python では、 x は長さ 1 の文字列でした。Python 2.3 以降では、x はどの長さでもかまいません。

(2)
n が 0 以下の値の場合、0 として 扱われます (これは s と同じ型の空の配列を表します)。 コピーは浅いコピーなので注意してください; 入れ子になったデータ 構造はコピーされません。これは Python に慣れていないプログラマを よく悩ませます。例えば以下のコードを考えます:

>>> lists = [[]] * 3
>>> lists
[[], [], []]
>>> lists[0].append(3)
>>> lists
[[3], [3], [3]]

上のコードでは、 lists はリスト [[]] (空のリストを唯一の 要素として含んでいるリスト) の3つのコピーを要素とするリストです。 しかし、リスト内の要素に含まれているリストは各コピー間で共有されています。 以下のようにすると、異なるリストを要素とするリストを生成できます:

>>> lists = [[] for i in range(3)]
>>> lists[0].append(3)
>>> lists[1].append(5)
>>> lists[2].append(7)
>>> lists
[[3], [5], [7]]

(3)
i または j が負の数の場合、インデクスは文字列の 末端からの相対インデクスになります: len(s) + i または len(s) + j が代入されます。 しかし -0 は 0 のままなので注意してください。

(4)
s の i から j へのスライスは i <= k < j となるようなインデクス k を持つ要素からなる配列として定義されます。i または j が len(s) よりも大きい場合、len(s) を使います。 i が省略された場合、0 を使います。 j が省略された場合、len(s) を使います。 i が j 以上の場合、スライスは空の配列になります。

(5)
s の i 番目から j 番目まで k 毎の スライスは、0 <= n < abs(i-j) となるような、 インデクスx = i + n*k を持つ要素からなる配列として 定義されます。 i または j len(s) より大きい場合、len(s) を使います。i または j を省略した場合、``最後'' (k の符号に依存)を示す値を使います。k はゼロにできないので 注意してください。



... は対応する数値演算と同じ優先度です。2.8
パーザが被演算子の型を識別できるようにするために、このような優先度でなければならないのです。



ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。