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
[]
上記からわかるように、各アプローチにはわずかに異なるユースケースがあります。それでも、値を記憶せずにリストから単一の要素を削除するだけであれば、どちらの方法でも機能します。
コードの幅広いコンテキストで読みやすいものを使用してください。