🐍 Python

list.remove(x) / list.pop(i) / del list[i]

リストから要素を削除する3つの方法です。「値そのもの」で消すか「位置(インデックス)」で消すかが異なるため、どちらを使うべきかは削除したい対象によって決まります。

list.remove(x)  # 値がxと一致する最初の要素を削除
list.pop(i)     # インデックスiの要素を削除して、その値を返す(i省略時は末尾)
del list[i]     # インデックスiの要素を削除する(値は返さない)

removeの基本:値で削除する

一致する要素が複数あっても、最初の1つだけが削除されます。

lst = [1, 2, 3, 2]
lst.remove(2)
print(lst)  # [1, 3, 2](最初の2だけ消える)

removeは見つからないとValueError

lst6 = [1, 2, 3]
try:
    lst6.remove(99)
except ValueError as e:
    print("ValueError:", e)
# ValueError: list.remove(x): x not in list

popの基本:削除した値を受け取れる

pop()は引数を省略すると末尾の要素を削除して返します。引数にインデックスを渡すと、その位置の要素を削除して返します。「取り出しながら削除する」というスタック的な操作によく使われます。

lst7 = [1, 2, 3]
x = lst7.pop()
print(x, lst7)  # 3 [1, 2]

lst8 = [1, 2, 3]
y = lst8.pop(0)
print(y, lst8)  # 1 [2, 3]

delでインデックス指定削除する

delは文(statement)であり、メソッドではありません。値を返さず、ただ削除するだけです。

lst9 = [1, 2, 3]
del lst9[1]
print(lst9)  # [1, 3]
3つの削除方法の違い
remove(x)
「値」で指定して削除。見つからなければValueError
pop(i)
「位置」で指定して削除し、削除した値を戻り値として受け取れる。範囲外だとIndexError
del list[i]
「位置」で指定して削除するだけの文。値は受け取れない
💡 AIコードレビュー観点:removeとpopの引数を混同していないか

remove(1)は「値が1の要素」を消しますが、pop(1)は「インデックス1(2番目)の要素」を消します。両方とも引数に数値を渡すため見た目が似ており、AIが生成したコードでも意図と違う方が使われていると、削除される要素が変わってしまいます。「値で消したいのか、位置で消したいのか」を必ず確認しましょう。

要素を追加する方法はappend/extend/insertのページで解説しています。

← Python list クイックリファレンス一覧へ戻る