このチュートリアルでは、Python の配列/リストから要素を削除するための一般的な方法をいくつか紹介します。
配列かリストか?
Python の組み込みのシーケンス表現はリストで、要素の異種列として定義され、各要素はシーケンス内の明確なインデックスを持っています。配列を使うには、 array
モジュールをインポートする必要があります。これは Python 自身にも含まれていますが、リストの方がはるかによく使われます。
さらに、リストの構文は他のプログラミング言語で配列を定義する構文とよく似ているので、同じデータ構造ではないにもかかわらず、「配列」と「リスト」という用語はしばしば同じように使われます。これらのメソッドの多くは、配列とリストの両方に対して機能することに注目しましょう!
remove()を使用する
適切な表現として、Python の remove()
関数は任意の配列やリストに対して使用することができます。この関数を使うには、削除したい要素の値を渡せばよいのです。例えば、次のような配列があったとしましょう。
array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
例えば、要素 40
を削除するには、単純に次のように書きます。
array.remove(40)
その結果、同じ配列から値 40
を取り除いたものが得られます。
[10, 20, 30, 50, 60, 70, 80, 90, 100]
pop()を使用する
関数 pop()
は、削除したい要素のインデックスを受け取ります。先ほどと同じ配列/リスト(値は10から100)があったとすると、以下のように書くことができます。
index = 3
array.pop(index)
pop メソッドの結果を表示すると、それは値 40
になります。
[10, 20, 30, 50, 60, 70, 80, 90, 100]
スタックデータ構造で pop()
がどのように動作するかと同様に、ここでも pop()
は直前に削除した値を返します。
唯一の違いは、配列の場合、任意の要素を削除できることです。スタックでは、一番上の要素 (つまり、最後に追加された要素) しか削除することができません。
delの使用
del` はオブジェクトを削除するために使用される python のキーワードです。その正確な動作は文脈によって変化するので、リストの要素を削除するのにも使えます。ただし、配列はこれをサポートしていません。もう一度、前と同じ配列とインデックスを使用します。
array = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
index = 3
インデックス 3
にある要素を削除するには、次のように入力します。
del array[index]
ここで配列の内容を表示すると、次のような出力が得られます。
[10, 20, 30, 50, 60, 70, 80, 90, 100]
numpyの配列の使用
NumPyの配列は(特に機械学習で)よく使われるので、numpy
配列から要素を削除する方法の一つを紹介します。numpy` を使用する前に、インポートする必要があります。
import numpy as np
numpy配列を作るには、現在のリストを
np.array()` でラップすればよい。
a = np.array(array)
あるいは、メソッド呼び出しの内部で新しい配列を宣言することもできます。
a = np.array([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
ここで、インデックス 3
にある要素を削除するには、次のコードを使用します。
index = 3
a = np.delete(a, index)
delete()は
numpy` モジュールで宣言された静的メソッドです。このメソッドには配列と、削除する要素のインデックスを指定します。
このメソッドは、削除された要素を除いた新しい配列を返します。
[10, 20, 30, 50, 60, 70, 80, 90, 100]
結論
Pythonでリストの要素を削除する方法は様々です。あるときはインデックスで、あるときは値で要素を削除したいかもしれません。Pythonのデフォルトの配列を使うこともあれば、 numpy
配列を使うこともあります。
これらのケースでは、どのテクニックを使うかを決めるために、複数の選択肢があるのは良いことです。