Python リストの del、remove、pop の違いは何ですか

Aliaksei Yursha 2023年1月30日
  1. Python リストの値による削除
  2. インデックスによる Python リストの削除
  3. del による Python リストの削除
Python リストの del、remove、pop の違いは何ですか

よくあることですが、Python は同じことを達成するためのいくつかの手段を提供します。

リストから要素を削除する必要がある場合は、次のいずれかを使用できます。list.remove() または list.pop() 関数または組み込みの del ステートメント。

以下の例では、これらのアプローチのそれぞれを取り上げ、それらの違いとトレードオフについて説明します。

Python リストの値による削除

list.remove() はリストの最初の要素を削除します。その値は渡された引数と等しくなります。
この方法を使用する場合、通常、削除するアイテムのインデックスが何であるかを知りません。

>>> names = ['Bob', 'Cindy', 'Noah']
>>> names.remove('Cindy')
>>> names
['Bob', 'Noah']

この方法を使用するときは注意してください。
削除しようとしているアイテムがリストに存在しない場合、
Python ランタイムは ValueError をスローします。

>>> names = ['Bob', 'Noah']
>>> names.remove('Cindy')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list

この問題を回避するには、アイテムがあるかどうかを確認する必要があります
list.remove() を試みる前にリストに存在します。

>>> names = ['Bob', 'Noah']
>>> if 'Cindy' in names:
...   names.remove('Cindy')
...
>>>

インデックスによる Python リストの削除

削除する要素のインデックスがわかっている場合は、list.pop() メソッドを使用できます。

>>> names = ['Bob', 'Cindy', 'Noah']
>>> names.pop(1)
'Cindy'
>>> names
['Bob', 'Noah']

list.pop() は指定されたインデックスの要素を削除して返します。

list.pop() にインデックスを付けない場合、リストの最後の要素が削除されます。

>>> names = ['Bob', 'Cindy', 'Noah']
>>> names.pop()
'Noah'
>>> names
['Bob', 'Cindy']

del による Python リストの削除

インデックスによってリストから要素を削除する別のオプションは、del 組み込みステートメントを使用することです。
list.pop() とは異なり、del ステートメントは削除された値を返しません。

>>> names = ['Bob', 'Cindy', 'Noah']
>>> del names[1]
>>> names
['Bob', 'Noah']

del ステートメントは list.pop() よりも柔軟です。
リストから値の範囲を削除するために使用できます。

>>> names = ['Bob', 'Cindy', 'Noah']
>>> del names[0:2]
>>> names
['Noah']

リスト全体をクリアするためにも使用できます。

>>> names = ['Bob', 'Cindy', 'Noah']
>>> del names[:]
>>> names
[]

上記からわかるように、各アプローチにはわずかに異なるユースケースがあります。それでも、値を記憶せずにリストから単一の要素を削除するだけであれば、どちらの方法でも機能します。

コードの幅広いコンテキストで読みやすいものを使用してください。

関連記事 - Python List