Pythonでリストの要素を削除する方法は、主にremove()、pop()、del、clear()の4つです。
どれも要素を消すために使いますが、指定するものが異なります。
- 値を指定して削除する:
remove() - 位置を指定して削除する:
pop() - 位置や範囲を指定して削除する:
del - すべての要素を削除する:
clear()
削除方法を選ぶときは、「値で消したいのか」「位置で消したいのか」を先に考えると迷いにくくなります。
remove()で指定した値を削除する
remove()は、削除したい値が分かっているときに使います。
fruits = ["りんご", "みかん", "バナナ"]
fruits.remove("みかん")
print(fruits)実行結果は次のとおりです。
['りんご', 'バナナ']
remove("みかん")と書くことで、値が"みかん"の要素を削除しています。
ただし、同じ値が複数ある場合に削除されるのは、最初に見つかった1つだけです。
numbers = [10, 20, 10, 30]
numbers.remove(10)
print(numbers)実行結果は次のとおりです。
[20, 10, 30]
2つある10のうち、先頭に近い方だけが削除されています。
存在しない値をremove()するとエラーになる
リストに存在しない値をremove()で削除しようとすると、ValueErrorが発生します。
fruits = ["りんご", "みかん"]
fruits.remove("バナナ")削除する値がリストに含まれているか分からない場合は、inを使って先に確認できます。
fruits = ["りんご", "みかん"]
if "バナナ" in fruits:
fruits.remove("バナナ")
else:
print("削除する値がありません")外部から受け取ったデータなど、リストの内容が毎回変わる場合は、存在を確認してから削除するとエラーを防げます。
pop()で指定した位置の要素を削除する
pop()は、インデックスを指定して要素を削除します。インデックスとは、リスト内の位置を表す番号です。
fruits = ["りんご", "みかん", "バナナ"]
removed = fruits.pop(1)
print(fruits)
print(removed)実行結果は次のとおりです。
['りんご', 'バナナ']
みかん
Pythonのインデックスは0から始まるため、pop(1)で2番目の"みかん"が削除されます。
pop()の特徴は、削除した要素を戻り値として受け取れることです。この例では、削除された"みかん"がremovedに入ります。
引数を省略してpop()と書くと、リストの末尾にある要素が削除されます。
numbers = [10, 20, 30]
last_number = numbers.pop()
print(numbers)
print(last_number)実行結果は次のとおりです。
[10, 20]
30
「末尾から要素を取り出して、その値も使いたい」という場面ではpop()が便利です。
delで位置や範囲を指定して削除する
delも、インデックスを指定して要素を削除できます。
fruits = ["りんご", "みかん", "バナナ"]
del fruits[1]
print(fruits)実行結果は次のとおりです。
['りんご', 'バナナ']
pop()との違いは、delでは削除した値を受け取れないことです。
一方、delはスライスを使って複数の要素をまとめて削除できます。スライスとは、リストの範囲を指定する書き方です。
numbers = [10, 20, 30, 40, 50]
del numbers[1:4]
print(numbers)実行結果は次のとおりです。
[10, 50]
numbers[1:4]は、インデックス1から3までの範囲です。終点のインデックス4は削除範囲に含まれません。
clear()ですべての要素を削除する
リストを空にしたい場合は、clear()を使います。
numbers = [10, 20, 30]
numbers.clear()
print(numbers)実行結果は次のとおりです。
[]
変数numbers自体は残りますが、中に入っていた要素はすべて削除されます。
リストそのものが不要なのではなく、「同じリストを空にして使い直したい」ときに適した方法です。
同じ値をすべて削除する方法
remove()で削除できるのは、最初に見つかった1つだけです。
同じ値をすべて取り除きたい場合は、残したい要素だけで新しいリストを作ります。
numbers = [10, 20, 10, 30, 10]
numbers = [number for number in numbers if number != 10]
print(numbers)実行結果は次のとおりです。
[20, 30]
この書き方は、「10ではない要素だけを新しいリストに入れる」という意味です。
元のリストから要素を順番に削除するのではなく、必要な要素を選び直すと考えると理解しやすくなります。
削除すると後ろのインデックスが変わる
リストから要素を削除すると、それより後ろにあった要素は前へ詰められます。
たとえば、["A", "B", "C"]から"A"を削除すると、"B"のインデックスは1から0へ変わります。
そのため、複数の要素を位置で続けて削除するときは、削除後のインデックスが変わることに注意が必要です。
まとめ
Pythonでリストの要素を削除するときは、目的に応じて方法を選びます。
- 値を指定して削除するなら
remove() - 位置を指定し、削除した値も使うなら
pop() - 位置や範囲を指定して削除するなら
del - すべての要素を削除するなら
clear() - 同じ値をすべて取り除くなら、条件に合う要素で新しいリストを作る
削除方法の名前を暗記するよりも、「値」「位置」「範囲」「全要素」のどれを指定したいかで判断すると、適切な方法を選びやすくなります。

