2.3.6.4 変更可能なシーケンス型

リストオブジェクトはオブジェクト自体の変更を可能にする追加の操作を サポートします。他の変更可能なシーケンス型 (を言語に追加する場合) も、 それらの操作をサポートしなければなりません。 文字列およびタプルは変更不可能なシーケンス型です: これらのオブジェクトは 一度生成されたらそのオブジェクト自体を変更することができません。 以下の操作は変更可能なシーケンス型で定義されています (ここで x は 任意のオブジェクトとします):

操作 結果 注釈
s[i] = x s の要素 sx と入れ替えます
s[i:j] = t si から j 番目までの要素を t と入れ替えます
del s[i:j] s[i:j] = [] と同じです
s[i:j:k] = t s[i:j:k] の要素を t と入れ替えます (1)
del s[i:j:k] リストから s[i:j:k] の要素を削除します
s.append(x) s[len(s):len(s)] = [x] と同じです (2)
s.extend(x) s[len(s):len(s)] = x と同じです (3)
s.count(x) s[i] == x となる i の個数を返します
s.index(x[, i[, j]]) s[k] == x かつ i <= k < j となる最小の k を返します。 (4)
s.insert(i, x) i >= 0 の場合の s[i:i] = [x] と同じです (5)
s.pop([i]) x = s[i]; del s[i]; return x と同じです (6)
s.remove(x) del s[s.index(x)] と同じです (4)
s.reverse() s の値の並びを反転します (7)
s.sort([cmp[, key[, reverse]]]) s の要素を並べ替えます (7), (8), (9), (10)
Notes:
(1)
t は入れ替えるスライスと同じ長さでなければいけません。

(2)
かつての Python の C 実装では、複数パラメタを受理し、 非明示的にそれらをタプルに結合していました。この間違った機能は Python 1.4 で廃用され、Python 2.0 の導入とともにエラーにする ようになりました。

(3)
x がリストオブジェクトでない場合、例外を送出します。 extend() は実験的なメソッドであり、リスト以外の変更可能な シーケンス型ではサポートされていません。

(4)
xs 中に見つからなかった場合 ValueError を送出します。  負のインデクスが二番目または三番目のパラメタとして index() メソッドに渡されると、これらの値にはスライスのインデクスと同様に リストの長さが加算されます。加算後もまだ負の場合、その値はスライス のインデクスと同様にゼロに切り詰められます。 バージョン 2.3 で 変更 された仕様: 以前は、index() は開始位置や終了位置を 指定するのに負の数を使うことができませんでした

(5)
insert() の最初のパラメタとして負のインデクスが渡された場合、スライスのインデクスと同じく、リストの長さが加算されます。それでも負の値を取る場合、スライスのインデクスと同じく、0 に丸められます。 バージョン 2.3 で 変更 された仕様: 以前は、すべての負値は 0 に丸められていました。

(6)
pop() メソッドはリストおよびアレイ型のみでサポート されています。オプションの引数 i は標準で -1 なので、 標準では最後の要素をリストから除去して返します。

(7)
sort() および reverse() メソッドは 大きなリストを並べ替えたり反転したりする際、容量の節約のために リストを直接変更します。副作用があることをユーザに思い出させるために、 これらの操作は並べ替えまたは反転されたリストを返しません。

(8)
sort() メソッドは、比較を制御するためにオプションの 引数をとります。

cmp は2つの引数(list items)からなるカスタムの比較関数を指定します。 これは始めの引数が2つ目の引数に比べて小さい、等しい、大きいかに応じて 負数、ゼロ、正数を返します。 "cmp=lambda x,y: cmp(x.lower(), y.lower())"

key は1つの引数からなる関数を指定します。これは個々のリストの要素から 比較のキーを取り出すのに使われます。 "key=str.lower"

reverse は真偽値です。 True がセットされた場合、リストの要素は 個々の比較が反転したものとして並び替えられます。

一般的に、 key および reverse の変換プロセスは同等の cmp 関数を 指定するより早く動作します。これは key および reverse がそれぞれの要素に 一度だけ触れる間に、cmp はリストのそれぞれの要素に対して複数回呼ばれることに よるものです。

バージョン 2.3 で 変更 された仕様: None を渡すのと、cmp を省略した場合とで、 同等に扱うサポートを追加

バージョン 2.4 で 変更 された仕様: key および reverse のサポートを追加

(9)
Python2.3 以降、sort() メソッドは安定していることが 保証されています。 ソートは等しいとされた要素の相対オーダーが変更されないことが 保証されれば、安定しています -- これは複合的なパス(例えば部署ごとにソートして、 それを給与の等級)でソートを行なうのに役立ちます。

(10)
リストが並べ替えられている間は、リストの変更はもとより、 その値の閲覧すらその結果は未定義です。 Python 2.3以降 の C 実装では、この間リストは空に見えるようになり、 並べ替え中にリストが変更されたことが検出されると ValueError が送出されます。

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