Python講座 / リストを作り、要素を追加・変更・削除する

リストは順序のある複数の値を保持し、要素を変更できます。並べ替えやコピーでは、元のリストを変える操作と、新しいリストを返す操作を区別する必要があります。

操作の目的と戻り値を確認する

角かっこでリストを作り、先頭の要素は0で取り出します。重複や異なる型を含められますが、合計に使う値は意味と単位をそろえます。

目的 書き方 注意点
一要素の追加 items.append(value) リストを渡しても一つの入れ子要素になる
複数要素の追加 items.extend(values) 反復可能な値から一つずつ追加する
位置による削除 items.pop(index) 削除した値を返す
値による削除 items.remove(value) 最初の一致を消し、なければ失敗する

リストの共有と変換は、リスト・辞書・集合の内包表記を使うで扱う規則とつながります。

変更と並べ替えを実行する

lists.pyとして次の全体コードを保存し、仮想環境でpython lists.pyを実行します。追加した1000を取り除いた後、先頭の金額が4000になっている点を追います。

amounts = [3500, 8000, 2500]
amounts.append(1000)
amounts[0] = 4000
removed = amounts.pop()
print(amounts, removed)
print(sorted(amounts))
print(amounts)
amounts.sort()
print(amounts)

予想結果です。sortedの後とsortの後で、元のamountsがどう変わったか比較してください。

[4000, 8000, 2500] 1000
[2500, 4000, 8000]
[4000, 8000, 2500]
[2500, 4000, 8000]

変更・並べ替え・コピーを分ける

sorted(amounts)は新しいリストを返し、元の順番を維持します。amounts.sort()は元のリストを変更し、戻り値はNoneです。amounts = amounts.sort()と書くと、並べ替えたリストではなくNoneを代入してしまいます。

amounts[:]は外側のリストを浅くコピーしますが、中の可変オブジェクトは共有されたままです。other = amountsは外側もコピーせず、同じオブジェクトへ別の名前を付けます。影響範囲は参照とコピーの例で確認できます。

空データと反復中の変更に対応する

空リストの0番目を読む操作やpop()はIndexErrorになります。空の入力が正しい状態なのか、要件違反なのかを先に決めます。remove()は対象がない場合にValueErrorを発生させます。

反復している最中に同じリストから要素を消すと、位置がずれて処理を飛ばすことがあります。コピーを反復するか、条件に合う新しいリストを作ります。amountsへ0を追加して、合計は同じでも要素数と順番が変わることを観察し、元のデータへ戻してください。集計値だけでは構造の変化を検出できません。

list.sort() は元のリストを並べ替えて None を返し、sorted(iterable) は新しいリストを返します。items = items.sort() と書くとNoneを代入してしまいます。どちらも内部のオブジェクトを深くコピーする機能ではありません。

操作 結果 観察
items.sort() None 元を変更
sorted(items) 新しいリスト 元の順序を維持

関連する公式リファレンス