Pythonのリストの値を削除する

概要

実現方法・説明

ここでは既存のリストの任意の値(要素)を削除する方法を説明する。

delを使う

削除したい要素のオフセットを指定して削除する方法である。
こんな感じ。

del new_list[2]

これでリスト「new_list」の3番めの要素が削除される。

なお、delで削除出来る要素(値)は1度に1つだけである。
またdelはリストのメソッドではないので、new_list[2].delのようには書かない。

remove()を使う

削除したい要素のオフセットがわからない場合は、remove()を使う方法もある。
こんな感じ。

new_list.remove(‘kiwi’)

これでリスト「new_list」の要素の’kiwi’が削除される。
・指定した要素(ここでは’kiwi’)が複数存在する場合でも削除されるのは1つだけである。同じ値をもつすべての要素を削除する場合はwhile文などで処理を記述する必要がある。
・指定した要素が存在しない場合、ValueErrorの例外が発生する。
 (list.remove(x): x not in list)

注意点

複数の要素をdelで削除する場合、削除するたびにオフセットがずれていく可能性があるので必ず最新のオフセットを意識しながら処理をすすめていく注意が必要になる。

使用例

動作確認環境:Python3.6.5 / macOS 10.15.6

ex.1 delを使ったリストからの削除

最初に5個の要素をもつリストを作成、その後2番めのオフセットの要素を削除する。
内容を表示しながら見ていこう。

コード
new_list = ['111', '222', '333', '444', '555']

print('--- リスト作成後 ---')
print("内容")
print(new_list)
print("要素の個数")
print(len(new_list))

del new_list[2]

print('--- オフセット2削除後 ---')
print("内容")
print(new_list)
print("要素の個数")
print(len(new_list))
実行結果

— リスト作成後 —
内容
[‘111’, ‘222’, ‘333’, ‘444’, ‘555’]
要素の個数
5
— オフセット2削除後 —
内容
[‘111’, ‘222’, ‘444’, ‘555’]
要素の個数
4

解説

1行めで、5つの要素を持つリスト「new_list」を作成する。
9行めで、オフセット2の要素を削除する。

3番めの要素が削除され、個数も1個減って4個になったことが確認出来る。

ex.2 remove()を使ったリストからの削除

リストからremove()で要素を指定して削除すると、リスト内の指定した値と同じ値の要素が1つ削除される。
内容を表示しながら見ていこう。

コード
new_list = ['111', '222', '333', '444', '555', '222', '333']

print('--- リスト作成後 ---')
print("内容")
print(new_list)
print("要素の個数")
print(len(new_list))

new_list.remove('222')

print('--- remove削除後 ---')
print("内容")
print(new_list)
print("要素の個数")
print(len(new_list))
実行結果

— リスト作成後 —
内容
[‘111’, ‘222’, ‘333’, ‘444’, ‘555’, ‘222’, ‘333’]
要素の個数
7
— remove削除後 —
内容
[‘111’, ‘333’, ‘444’, ‘555’, ‘222’, ‘333’]
要素の個数
6

解説

1行めでリストを生成している。値’222’をもつ要素を2番めと6番めに設定した。
9行めで値’222’の要素をremoveしている。
実行結果をみると、removeした後、2番めの要素’222’が削除されていることがわかる。6番め(実行後は5番め)の要素’222’は残ったままだ。

ex.3 remove()とwhileループを使ったリストからの全削除

ex.2のように同じ値の要素を削除したいとき、どれかひとつではなく、すべての値を削除したい場合も考えられる。そんなときはリストの中に同じ値をもつ要素の有無を調べながらremove()で要素を指定して削除すると、リスト内の指定した値と同じ値の要素をすべて削除することが出来る。
内容を表示しながら見ていこう。

コード
new_list = ['111', '222', '333', '444', '555', '222', '333']

print('--- リスト作成後 ---')
print("内容")
print(new_list)
print("要素の個数")
print(len(new_list))

while '222' in new_list:
    new_list.remove('222')

print('--- whileループ後 ---')
print("内容")
print(new_list)
print("要素の個数")
print(len(new_list))
実行結果

— リスト作成後 —
内容
[‘111’, ‘222’, ‘333’, ‘444’, ‘555’, ‘222’, ‘333’]
要素の個数
7
— whileループ後 —
内容
[‘111’, ‘333’, ‘444’, ‘555’, ‘333’]
要素の個数
5

解説

1行めでリストを生成している。ex.2と同じように、値’222’をもつ要素を2番めと6番めに設定した。
9行めでwhileループを記述、ループの継続条件は、値’222’をもつ要素がリスト中に存在する間とし、10行めで値’222’の要素をremoveしている。
これでリスト内に削除したい要素が存在する間は、複数回remove()が実行される。

実行結果をみると、値’222’の要素はすべて削除されていることがわかる。

補足

なし

Pythonバンザイ

タイトルとURLをコピーしました