Python でリストから要素の出現をすべて削除する

  1. Python でリストから要素のすべてのインスタンスを削除するには filter() 関数を使用する
  2. Python でリストから要素のすべてのインスタンスを削除するためにリスト内包表記を使用する
  3. Python でリストからすべての要素のインスタンスを削除するには remove() 関数を使用する

Python のリストでは、同じ要素を複数回出現させることができます。要素の値が他の要素と同じであっても、それぞれの要素は異なるインデックスを持っています。このインデックス番号を利用して、好きな要素に簡単にアクセスすることができます。

しかし、同じ要素が複数存在したくない状況もあるかもしれません。Python では、これを実現するためのさまざまな方法があります。

Python でリストから要素のすべてのインスタンスを削除するには filter() 関数を使用する

Python では、filter() 関数の助けを借りて、要素のフィルタリングが簡単になります。第 1 引数は関数で、第 2 引数にはセット、リスト、タプルなどを指定することができます。

例 1: filter() 関数と __ne__ の組み合わせ

myList = [2, 1, 3, 5, 1, 1, 1, 0]
myList = list(filter((1).__ne__, myList))
print(myList)

出力:

[2, 3, 5, 0]

この例では、1 の出現を削除したいリスト myList があります。filter() 関数は別の関数 __ne__ を取ります。この関数は、値1 がリスト myList 内に存在するかどうかに基づいて、True または False のいずれかのブール値を返します。値 1 がリスト内に存在する場合、それは単にそれを破棄します。次に、filter() 関数によって返されるものはすべて、list() 関数を使用してリストに変換されます。

例 2: filter() 関数と lambda 関数の組み合わせ

myList = [2, 1, 3, 5, 1, 1, 1, 0]
valueToBeRemoved = 1

result = filter(lambda val: val !=  valueToBeRemoved, myList) 
print(list(result)) 

出力:

[2, 3, 5, 0]

関数 __ne__ を渡す代わりに、filter() 関数に lambda 関数を渡します。

リスト myList から各要素を一つずつ取り出し、変数 val に格納します。もし valvalueToBeRemoved の両方の要素が等しくなければ、val の中にある要素だけが新しい変数 result に追加されます。この result をリストに変換するには、list() 関数を用いなければならません。

Python でリストから要素のすべてのインスタンスを削除するためにリスト内包表記を使用する

リスト内包表記は、コードの短い書き方です。リスト内包は通常の関数やループよりも高速です。

コード例:

myList = [1, 2, 3, 4, 2, 2, 3]
valueToBeRemoved = 2

myList = [value for value in myList if value != valueToBeRemoved]

print(myList)

出力:

[1, 3, 4, 3]

リスト myList があり、そこから要素 2 の出現を削除したい。要素のすべてのインスタンスを削除するための主なコードは、角括弧 [] の中にあります。ここでは、まず for ループが実行され、リスト myList から値を取り出して変数 value に格納します。その後、変数 value 内の値と変数 valueToBeRemoved 内の値が一致しない場合は、変数 value の値を返してリスト myList に格納するだけです。この処理はリストが空になるまで続きます。最後に、あなたが望む出力を含むリストができあがります。

Python でリストからすべての要素のインスタンスを削除するには remove() 関数を使用する

関数 remove() は最初に出現した要素のみを削除します。もし remove() 関数を使って要素の出現をすべて削除したい場合は、for ループか while ループのいずれかのループを使うことができます。

myList = [2, 1, 3, 5, 1, 1, 1, 0]
valueToBeRemoved = 1
 
try:
    while True:
        myList.remove(valueToBeRemoved)
except ValueError:
    pass
 
print(myList)

出力:

[2, 3, 5, 0]

上記のコードでは、リスト myList を作成し、変数 valueToBeRemoved を作成しました。この変数には、リストからオカレンスを削除する要素(この例では 1)が含まれています。リストをループしているときに、その要素がリスト内にある場合は、remove() 関数を使用してリストから削除されます。

関連記事 - Python List

  • Python でオブジェクトのリストを並べ替える
  • Python でリストから重複を削除する