Pythonでリストの要素を削除する方法|remove・pop・delの違いを解説

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()
  • 同じ値をすべて取り除くなら、条件に合う要素で新しいリストを作る

削除方法の名前を暗記するよりも、「値」「位置」「範囲」「全要素」のどれを指定したいかで判断すると、適切な方法を選びやすくなります。

この記事が役に立ったらシェア
  • URLをコピーしました!
この記事の内容