要素の追加と削除

Pythonのリストは、作成した後からでも自由に動的に要素を追加したり削除したりすることができます。これにより、扱うデータのサイズをプログラムの実行に合わせて必要に応じて柔軟に調整することが可能です。本記事では、リストへの要素の追加と削除の方法について詳しく解説します。
要素の追加方法
Pythonのリストに要素を追加するには、主に append()、extend()、insert() といったメソッドを使用します。それぞれの追加される場所や渡し方の違いに注目してみましょう。
# リストに要素を追加する
fruits = ["apple", "banana"]
# append() でリストの末尾に「1つの要素」を追加
fruits.append("cherry")
print(fruits) # 出力: ["apple", "banana", "cherry"]
# extend() で別のリストを合体(複数の要素を一度に追加)
fruits.extend(["orange", "grape"])
print(fruits) # 出力: ["apple", "banana", "cherry", "orange", "grape"]
# insert() で指定したインデックス(位置)に要素を挿入
fruits.insert(1, "mango")
print(fruits) # 出力: ["apple", "mango", "banana", "cherry", "orange", "grape"]
append() はリストの末尾に引数として渡されたオブジェクトをそのまま1つの要素として追加し、extend() は別のリスト(配列)を現在のリストの後ろに連結します。insert(インデックス, 要素) を使うと、指定した位置(上の例では0から数えて1番目、つまり apple と banana の間)に要素を割り込ませることができます。
追加解説:初心者が間違いやすい append() と extend() の決定的な違い
append() の中に ["X", "Y"] のようにリストを丸ごと渡してしまうと、要素がバラバラに増えるのではなく、「リストの中に別の小部屋(リスト)がそのまま1つの要素として入ってしまう」という状態になります。複数の要素をそのまま平坦に繋げたい場合は、必ず extend() を選ぶ必要があります。
# 違いを比較してみましょう
list_a = [1, 2]
list_b = [1, 2]
# appendでリストを渡すと二重構造になる
list_a.append([3, 4])
print(list_a) # 出力: [1, 2, [3, 4]]
# extendなら平坦に繋がる
list_b.extend([3, 4])
print(list_b) # 出力: [1, 2, 3, 4]
要素の削除方法
リストから要素を削除する方法には、用途に合わせて remove()、pop()、clear()、そして del 文があります。
# リストから要素を削除する
numbers = [10, 20, 30, 40, 50]
# remove() で指定した「値」と一致する要素を削除
numbers.remove(30)
print(numbers) # 出力: [10, 20, 40, 50]
# pop() で指定したインデックス(位置)の要素を削除し、切り取った値を受け取る
popped_item = numbers.pop(2)
print(numbers) # 出力: [10, 20, 50]
print(popped_item) # 出力: 40 (インデックス2番目にあった40が取り出されている)
# clear() で中身を完全に空っぽにする
numbers.clear()
print(numbers) # 出力: []
remove() は、「何番目か」ではなく「消したい中身の値そのもの」を指定して最初の1つをリストから削除します。一方、pop() は「消したい位置のインデックス」を指定して要素を削除し、同時にその値をプログラム内で再利用するために変数へと返す(返り値)のが特徴です。なお、pop() の引数を空(pop())にした場合は、最も末尾の要素が自動的に切り落とされます。
追加解説:指定した値がリストに存在しない場合のエラー回避
remove() メソッドは非常に便利ですが、もしリスト内に指定した値が存在しなかった場合、ValueError という重大なエラーが発生してプログラムが強制終了してしまいます。これを防ぐために、実務では in 演算子を使って「事前に値が存在するかどうか」をチェックしてから削除するのが定番の安全対策です。
items = ["apple", "banana"]
target = "cherry"
# 安全に削除するための条件分岐
if target in items:
items.remove(target)
print(f"{target}を削除しました")
else:
print(f"{target}はリストに見つからないため、スキップしました")
リスト操作のメリットと注意点
メリット
- リストはあらかじめサイズを決める必要がなく、動的に要素の追加と削除が容易に行えること。
- 値による指定(
remove)と位置による指定(pop/insert)を自在に使い分けることができる点。
注意点
- パフォーマンス(処理速度)の低下: リストの先頭や途中に要素を挿入(
insert)・削除(remove/pop)すると、それ以降にある全ての要素をメモリ内で後ろや前に1つずつ「ずらす」内部処理が発生します。そのため、何万件もの巨大なリストに対してこれらの操作を頻繁に行うと、プログラムの動作が重くなる原因になります。 - 範囲外エラー: 存在しないインデックスを
insertしても末尾に追加されるだけですが、pop()で指定するとIndexErrorというエラーが発生する可能性があるため注意が必要です。
まとめ
リストは柔軟にデータを出し入れできる非常に強力なデータ型であり、要素の追加や削除が簡単なメソッドで実行可能です。末尾への追加は append()、別のリストとの結合は extend()、特定の値の削除は remove()、位置を指定した切り出しは pop()、といったそれぞれの特徴を正しく理解し、データ操作の目的に応じて最適なメソッドを選べるようになりましょう。次回は、リストの並び替えや検索について詳しく解説します。