要素の変更
リストオブジェクトは一度作成された後で要素が参照するオブジェクトを変更することが出来ます。(文字列の場合は、個々の要素が参照する文字を変更できません)。
要素が参照するオブジェクトを変更するには、インデックスを指定して取得した要素に対して新しいオブジェクトを代入します。
リスト[インデックス] = オブジェクト
この時、新しいリストオブジェクトが作成されるのではなく、元のリストオブジェクトの指定の要素が参照するオブジェクトが変更になります。
具体的には次のように記述します。
list = ["A", "B", "C"] list[1] = "b" print list # ["A", "b", "C"]
指定したインデックスの要素が参照するオブジェクトが文字列「B」から文字列「b」に変更になります。
またスライスを使って取得したリストに対して新しいリストを代入することで、リストの一部分を別のリストに置き換えることが出来ます。
リスト[開始インデックス:終了インデックス] = 別のリスト
具体的には次のように記述します。
list = ["A", "B", "C", "D"] list[1:3] = ["b", "c"] print list # ["A", "b", "c", "D"]
スライスによって取得した部分リストを別のリストによって置き換えています。
また今回は置き換えられるリストの要素数と置き換えるリストの要素数は同じでしたが、必ずしも同じである必要はありません。次の例を見てください。
list = ["A", "B", "C", "D"] list[1:3] = ["B", "b", "C", "c"] print list # ["A", "B", "b", "C", "c", "D"]
上記では対象のリストの2つの要素に対して、4つの新しい要素を持つリストを代入しています。結果的に2つの要素を4つの要素で置き換えることになりますのでリストは6つの要素を持つオブジェクトになります。
スライスを使う場合も、新しいリストオブジェクトが作成されるのではなく、元のリストオブジェクトが変更されていることに注意して下さい。
では実際に試してみます。
#coding: UTF-8 list = ["A", "B", "C", "D", "E"] print u"変更前", list list[1] = "b" print u"変更後", list list[3:5] = ["d", "e"] print u"変更後", list preflist = ["Tokyo", "Osaka", "Fukuoka"] print u"変更前", preflist preflist[1:2] = ["Osaka", "Nagoya", "Sapporo"] print u"変更後", preflist
上記を「test4-1.py」として保存します。保存する時の文字コードはUTF-8です。そして次のように実行して下さい。
( Written by Tatsuo Ikura )