【Python】リスト(配列)要素の削除(remove,del,pop)や重複を削除する方法について

Python

はじめに

しげっち
しげっち

リスト要素を削除する方法について解説するよ。

にゃーすけ
にゃーすけ

これを勉強すれば、食べたい物リストにうっかり野菜を入れてしまっても消すことができるようになるにゃ。

しげっち
しげっち

野菜もしっかり食べようね。

リスト要素の削除

値を指定して削除する remove

removeに丸括弧()をつけて削除したい値を指定することで、値が一致する要素を削除できます。

list_a.remove( 削除したい値 )

removeのサンプル

list_a = ['ケーキ','りんご','アイス','ケーキ','りんご','アイス']
list_a.remove('りんご')
print(list_a)

# 実行結果
# ['ケーキ', 'アイス', 'ケーキ', 'りんご', 'アイス']

removeりんごを指定して、リスト要素からりんごの要素を削除しました。

にゃーすけ
にゃーすけ

りんごは二つあるのに一つしか消えていないにゃ?

しげっち
しげっち

removeは最初に値が一致した要素しか削除しないんだ。
複数の同じ値を削除する方法は次に説明するよ。

複数の同じ値を削除する

リストの要素から複数の同じ値を削除する場合は、リスト内包表記を使用します。
正確には、リスト内包表記を使用して不要な値の要素を取り除いた新しいリストを作るイメージになります。

不要な値を取り除いた新しいリストを作成するサンプル

list_a = ['ケーキ','りんご','アイス','ケーキ','りんご','アイス']
list_a = [i for i in list_a if i not in 'りんご']
print(list_a)

# 実行結果
# ['ケーキ', 'アイス', 'ケーキ', 'アイス']

複数存在するりんごの要素を取り除いたリストを作成しました。

しげっち
しげっち

複数の異なる値を同時に取り除くこともできるよ。

不要な複数の異なる値を取り除いた新しいリストを作成するサンプル

list_a = ['ケーキ','りんご','アイス','ケーキ','りんご','アイス']
list_a = [i for i in list_a if i not in ['りんご','ケーキ']]
print(list_a)

# 実行結果
# ['アイス', 'アイス']

りんごケーキを取り除きました。
このように取り除きたい値をリスト形式で指定することができます。

インデックス指定した要素を削除 del

リストの要素をインデックスで指定して削除できます。

del list_a[ 削除する要素のインデックス ]

delのサンプル

list_a = ['ケーキ','りんご','アイス','みかん','どらやき','おはぎ']
del list_a[2]
print(list_a)

# 実行結果
# ['ケーキ', 'りんご', 'みかん', 'どらやき', 'おはぎ']

インデックスでを指定し、3番めの要素であるアイスを削除しました。

しげっち
しげっち

インデックスはマイナスの指定もできるよ。

要素の最後から数えて削除するサンプル

list_a = ['ケーキ','りんご','アイス','みかん','どらやき','おはぎ']
del list_a[-2]
print(list_a)

# 実行結果
# ['ケーキ', 'りんご', 'アイス', 'みかん', 'おはぎ']

インデックスに−2を指定して、最後から2番めの要素であるどらやきを削除しました。

スライスで範囲指定した要素を削除する

スライスで範囲指定した要素を一括で削除出来ます。

del list_a[ 開始位置 : 終了位置 ]

スライスで要素を削除するサンプル

list_a = ['ケーキ','りんご','アイス','みかん','どらやき','おはぎ']
del list_a[2:5]
print(list_a)

# 実行結果
# ['ケーキ', 'りんご', 'おはぎ']

開始位置に,終了位置にを指定してアイス、みかん、どらやきの要素を削除しました。

リストをスライスで指定する詳細については下記を参照ください。

指定した要素の値を取得してリストから削除する pop

popを使用すると、指定した要素の値を取得した後リストから削除します。

list_a.pop( 削除する要素のインデックス )

popのサンプル

list_a = ['ケーキ','りんご','アイス','みかん','どらやき','おはぎ']
s = list_a.pop(3)
print(list_a)
print(s)

# 実行結果
# ['ケーキ', 'りんご', 'アイス', 'どらやき', 'おはぎ']
# みかん

インデックスにを指定して、4番目の要素であるみかんを変数に代入して削除しました。

全ての要素を削除する clear

リストから全ての要素を削除するにはclearを使用します。

list_a.clear()

clearのサンプル

list_a = ['ケーキ','りんご','アイス','みかん','どらやき','おはぎ']
list_a.clear()
print(list_a)

# 実行結果
# []

要素が全て削除され、リストは空になりました。

重複している値の要素を一つにする

リストで同じ値の要素が複数ある場合に一つにまとめます。

しげっち
しげっち

Pythonのリストでは重複した値の要素を一つにまとめる関数は準備されていないんだ。

にゃーすけ
にゃーすけ

じゃあどうするにゃ?

しげっち
しげっち

一旦set型に置き換えて重複を消し、それをまたリストにする方法や、
OrderedDictという標準モジュールを使用して重複を消すことができるよ。

setを使用したサンプル

list_a = ['ケーキ','りんご','アイス','ケーキ','りんご','アイス']
list_b = list(set(list_a))
print(list_a)
print(list_b)

# 実行結果
# ['ケーキ', 'りんご', 'アイス', 'ケーキ', 'りんご', 'アイス']
# ['りんご', 'アイス', 'ケーキ']

リストをset型に変換したタイミングで重複がなくなります。それをまたリスト型に戻します。
重複を削除する前と削除した後をそれぞれ実行結果に表示しました。

にゃーすけ
にゃーすけ

重複は消えたけど、リスト要素の並び順が変わってしまったにゃ。

しげっち
しげっち

この方法だと元の並び順は保証されないんだね。

OrderedDictを使用したサンプル

from collections import OrderedDict
list_a = ['ケーキ','りんご','アイス','ケーキ','りんご','アイス']
list_b = list(OrderedDict.fromkeys(list_a))
print(list_a)
print(list_b)

# 実行結果
# ['ケーキ', 'りんご', 'アイス', 'ケーキ', 'りんご', 'アイス']
# ['ケーキ', 'りんご', 'アイス']

OrderedDictをimportして、fromkeys関数に渡し、その戻り値をリスト型に変換することで重複を削除しました。

にゃーすけ
にゃーすけ

この方法だと並び順が変わらないにゃ。

まとめ

Pythonのリスト(配列)の要素を削除する方法について解説しました。

  • removeで値を指定して削除する。
  • removeでは複数の同じ値は削除できないため、同じ値を削除したい場合はリスト内包表記
    不要な値を取り除いた新しいリストを作成する。
  • delでインデックス指定した要素を削除する。
  • スライスで削除する要素を範囲指定できる。
  • popでインデックス指定した要素の値を取得して削除する。
  • clearで全ての要素を削除する。
  • 値が重複している要素を一つにまとめるにはset型に変換するかOrderedDict.fromkeysを使用する。
    前者は並び順が保証されないが後者は並び順が保証される。
にゃーすけ
にゃーすけ

これで僕の食べたいものリストから野菜を削除するにゃ。

しげっち
しげっち

にゃーすけの食べたいものリストをclearして野菜を沢山入れといたよ。
野菜もしっかり食べなさい!

にゃーすけ
にゃーすけ

そんにゃ〜。

最後までみていただきありがとうございます。

リストの要素を追加する方法は下記を参照ください。

リストを並び替えする方法は下記を参照ください。

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