HOWTO · Python
Python のリストから最初の要素を削除する
このチュートリアルでは、Python でリストから最初の要素を削除する方法を示します。
このページの内容
Python のリストの先頭要素を削除して元のリストを変更するには、items.pop(0) を呼び出すか、del items[0] を使います。インデックス 0 は先頭の位置です。先頭を除いた別のリストが必要なら items[1:] を使い、削除する値が分かっている場合に限り remove(value) を使います。
pop(0) で先頭要素をその場で削除する
pop(0) は元のリストのインデックス 0 にある要素を削除し、その要素を返します。更新後のリストだけでなく、削除した値も後続の処理で使う場合に便利です。インデックスを指定せずに pop() を呼び出すと、代わりに末尾の要素が削除されます。
次の例を実行します。
このセクションのコードと表示されるラベルや出力は英語のままです。
items = ["red", "green", "blue"]
removed = items.pop(0)
print(removed)
print(items)
元のリストは変更されるため、同じリストを参照しているほかの変数から見ても要素が削除されています。Python のリストの先頭から要素を削除すると、残りの要素は先頭側へ1つずつ移動します。左端から何度も削除する場合は、代わりに deque の使用を検討してください。
del で先頭要素をその場で削除する
削除した値が不要で、先頭の位置にある要素だけを削除したい場合は del items[0] を使います。pop(0) と同様に元のリストを変更しますが、del は文であり、要素を返しません。
このセクションのコードと表示されるラベルや出力は英語のままです。
items = ["red", "green", "blue"]
del items[0]
print(items)
値を指定して削除する場合に限り remove() を使う
items.remove(value) は value と等しい最初の要素を探して削除します。「インデックス 0 の要素を削除する」という意味ではありません。先頭の値がすでに分かっている場合は、その値を直接渡します。同じ値が複数あるときは、最初に一致した値だけが削除されます。
たとえば、items が ["red", "green", "red"] の場合、items.remove("red") の実行後は ["green", "red"] になります。先頭の値が分からず、先頭の位置にある要素を削除したい場合は、代わりに pop(0) または del items[0] を使います。空のリストには remove() に渡す先頭の値がありません。
先頭を除いた新しいリストが必要ならスライスを使う
items[1:] は、インデックス 1 から末尾までのすべての要素を含む新しいリストを作ります。元のリストは変更されません。変数がスライス後のリストを参照するようにしたい場合は、結果を items に代入します。
このセクションのコードと表示されるラベルや出力は英語のままです。
items = ["red", "green", "blue"]
remaining = items[1:]
print(remaining)
print(items)
スライスには明示的な終端インデックスがありません。Python では、終端を省略するとリストの末尾が使われるためです。結果は浅いコピーです。外側のリストは新しく作られますが、内部にある変更可能なオブジェクトは元のリストと共有されます。
NumPy 配列には numpy.delete() を使う
1次元の NumPy 配列では、numpy.delete(array, 0) はインデックス 0 の値を削除した新しい配列を返します。入力配列は変更されません。多次元配列では、既定の axis=None により、削除の前に配列が平坦化されます。行または列を削除したい場合は軸を指定します。たとえば、numpy.delete(array, 0, axis=0) は先頭行を除いた新しい配列を返します。この関数には NumPy が必要で、Python のリストのメソッドではなく、配列に対する操作です。通常のリストから要素を1つ削除するために配列へ変換するのではなく、データがすでに配列の場合に使います。
左端から繰り返し削除する場合は deque.popleft() を使う
キューの左端から繰り返し要素を取り出す場合は、collections.deque の popleft() を使えます。左端の要素を削除して返します。deque は両端で効率よく操作できるよう設計されていますが、リストの先頭から要素を削除すると残りの要素が移動します。通常のリストから1回だけ削除するなら、pop(0) または del items[0] のほうが簡潔です。キュー操作を含む処理全体に利点がある場合に deque へ変換してください。