list型(リスト)の要素を削除するには、インデックスを指定する方法(pop、del)と要素の値を指定する方法(remove)があります。この記事では、それぞれの方法についてまとめます。
確認した環境
- OS: Ubuntu 16.04LTS
- Python: ver3.6.4
要素の位置を指定して削除する(pop)
pop()メソッドは、引数で指定された位置の要素をリストから削除して、その要素を返します。
引数を削除すると、末尾の要素を削除します。
但し、popはそのアルゴリズムの関係上、リストの先頭に対して行うと遅くなってしまいます(他の要素をひとつずつずらす必要がある為)。
よって、速さが求められる場合は気をつけたほうが良いと思います。
#引数を省略すると末尾の要素を削除
>>> l = ['a', 'b', 'c']
>>> l.pop()
'c' # 削除した要素を返します
>>> l
['a', 'b'] # 元のリストは変更されます
#引数を設定し、削除する要素を指定する
>>> l = ['a', 'b', 'c']
>>> l.pop(1)
'b' # 削除した要素を返します
>>> l
['a', 'c'] # 元のリストは変更されます
要素の位置を指定して削除する(del)
del文もインデックスを指定して要素を削除します。pop() メソッドと違い、値を返しません。
# 削除する要素のインデックスを指定
>>> l = ['a', 'b', 'c']
>>> del l[1]
>>> l
['a', 'c']
# スライスで範囲を設定して複数の要素を削除
>>> l = ['a', 'b', 'c', 'd', 'e']
>>> del l[0:3]
>>> l
['d', 'e']
# リストの要素全部を指定すると、全部の要素が削除
>>> l = ['a', 'b', 'c', 'd', 'e']
>>> del l[:]
>>> l
[]
要素を指定して削除(remove)
要素を指定して削除するには、remove()メソッドを使います。指定した要素が複数ある場合は最初に見つかった要素が削除されます。
>>> l = ['a', 'b', 'c']
>>> l.remove('c')
>>> l
['a', 'b']
# 指定した要素が複数ある場合
>>> l = ['a', 'b', 'b', 'b', 'c']
>>> l.remove('b')
>>> l
['a', 'b', 'b', 'c']
# 要素が見つからなければエラーを返す
>>> l = ['a', 'b', 'c']
>>> l.remove('x')
Traceback (most recent call last):
File "", line 1, in
ValueError: list.remove(x): x not in list
指定した要素全てを削除する(その他)
指定した要素を全て削除するには、リスト内包表記を使う方法があります。リスト内包表記はこちらでも紹介していますのでご参照ください。
>>> l = ['a', 'b', 'b', 'b', 'c']
>>> [n for n in l if n!='b']
['a', 'c']
while文を使った、もうひとつのやり方です。
>>> l = ['a', 'b', 'b', 'b', 'c']
>>> while 'b' in l:l.remove('b')
...
>>> l
['a', 'c']
要素全てを削除する(clear)
要素を全部削除するのは、clear()メソッドを使います。これは、del l[:]と同じです。
>>> l = ['a', 'b', 'c', 'd', 'e']
>>> l.clear()
>>> l
[]
<参考>要素の追加・挿入・連結についてはこちらの記事にてまとめています。
まとめ
リストの要素を削除する方法について、インデックスを指定する場合、要素の値を指定する場合についてそれぞれまとめました。