Pythonのリスト(list)はミュータブル(変更可能)であるため、不要になった要素を削除できます。要素を削除する方法は主に3つあり、「どの要素を削除したいか」(位置か、値か)や、**「削除した値を取得したいか」**によって使い分ける必要があります。
この記事では、del 文、.remove() メソッド、.pop() メソッドの3つの機能と、それぞれの適切な使い方について解説します。
1. del 文 – インデックス(位置)を指定して削除
del は、Pythonの文(ステートメント)であり、指定したインデックス(位置番号)の要素をリストから完全に削除します。
この方法は、削除する要素の値が何であっても、位置が決まっている場合に使用します。削除した要素は戻り値として返されず、単に消去されます。
構文:
del リスト変数[インデックス]
使用例:
# ユーザーリスト
active_users = ["Sato", "Suzuki", "Takahashi", "Watanabe"]
print(f"削除前: {active_users}")
# 2番目 (インデックス 1) の "Suzuki" を削除
del active_users[1]
print(f"削除後: {active_users}")
実行結果:
削除前: ['Sato', 'Suzuki', 'Takahashi', 'Watanabe']
削除後: ['Sato', 'Takahashi', 'Watanabe']
active_users[1] にあった "Suzuki" が削除され、以降の要素が前に詰められました。
2. .remove() メソッド – 値を指定して削除
.remove() は、インデックスではなく値そのものを指定して要素を削除するメソッドです。
この方法は、位置はわからないが削除したい値はわかっている場合に使用します。
重要な注意点:
- 指定した値がリスト内に複数存在する場合、最初に見つかった要素(インデックスが最も若い要素)のみが削除されます。
- 指定した値がリスト内に存在しない場合、
ValueErrorというエラーが発生します。
構文:
リスト変数.remove(削除したい値)
使用例:
# タスクの重複があるリスト
task_list = ["Data Check", "Meeting", "Send Email", "Data Check"]
print(f"削除前: {task_list}")
# "Data Check" という値を削除
task_list.remove("Data Check")
print(f"削除後: {task_list}")
実行結果:
削除前: ['Data Check', 'Meeting', 'Send Email', 'Data Check']
削除後: ['Meeting', 'Send Email', 'Data Check']
インデックス 0 にあった最初の "Data Check" のみが削除され、末尾の "Data Check" は残っていることがわかります。
3. .pop() メソッド – インデックスを指定して削除(かつ値を取得)
.pop() は、del と同様にインデックスを指定して要素を削除しますが、最大の違いは削除した要素を戻り値として返す点です。
この方法は、リストから要素を取り出して、その値を別の変数で利用したい場合に非常に便利です(例:キューやスタックの実装)。
構文:
削除された値 = リスト変数.pop(インデックス)
重要な特徴:
インデックスを省略して リスト変数.pop() と呼び出すと、リストの末尾(最後)の要素が削除されて返されます。
使用例:
# 処理待ちのキュー
pending_queue = ["Job-A", "Job-B", "Job-C", "Job-D"]
print(f"キュー(削除前): {pending_queue}")
# 1. 先頭 (インデックス 0) の要素を取り出す (キューのデキュー操作)
processed_job = pending_queue.pop(0)
print(f"処理されたジョブ: {processed_job}")
print(f"キュー(処理後): {pending_queue}")
# 2. 末尾の要素を取り出す (インデックス省略)
last_job = pending_queue.pop()
print(f"末尾のジョブ: {last_job}")
print(f"キュー(末尾削除後): {pending_queue}")
実行結果:
キュー(削除前): ['Job-A', 'Job-B', 'Job-C', 'Job-D']
処理されたジョブ: Job-A
キュー(処理後): ['Job-B', 'Job-C', 'Job-D']
末尾のジョブ: Job-D
キュー(末尾削除後): ['Job-B', 'Job-C']
まとめ:3つの削除方法の使い分け
| 方法 | 指定方法 | 戻り値(削除した値) | 特徴 |
del 文 | インデックス(位置) | なし | 最もシンプルに位置で削除します。 |
.remove() | 値 | なし | 値で検索して削除します。重複時は最初の一つだけ。値がないと ValueError。 |
.pop() | インデックス(位置) (省略時は末尾) | あり | 削除した値を取得して再利用できます。 |
- 位置で削除したい、値は不要 ->
del - 値で削除したい ->
.remove() - 位置で削除し、その値を使いたい ->
.pop()
