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) | 新しいリスト | 元の順序を維持 |




