ウェブサイト検索

Pythonのリストからアイテムを削除する方法


Python リストからの項目の削除は、さまざまな手法を使用して実行できる一般的なタスクです。項目を位置または値で削除する必要がある場合は、Python が対応します。このチュートリアルでは、.pop()del ステートメント、および .remove() の使用など、リストから項目を削除するためのさまざまな方法を検討します。

remove()メソッドを使用すると、指定された値の最初の発生を削除できますが、 .pop()はインデックスでアイテムを削除して返すことができます。 del ステートメントは、インデックスでアイテムを削除する別の方法を提供します。また、リストのスライスを削除するために使用することもできます。選択したアプローチは、特定のニーズに依存します。

このチュートリアルが終わるまでに、次のことが理解できるようになります。

  • Python でリストから項目を削除するには、.pop()del などのさまざまな方法を使用できます。 、.remove().clear() です。
  • リスト内の特定の位置からアイテムを削除するには、 .pop() メソッドを使用します。
  • Python でリストから項目とスライスを削除するには、del ステートメントを使用します。
  • リストから指定された値の最初の発生を削除するには、code() メソッドを使用します。
  • リストからすべての項目を削除するには、.clear() を使用します。
  • また、ループ辞書、またはセットを使用して重複したアイテムを削除することもできます。

このチュートリアルを最大限に活用するには、リストの作成、リストへのアイテムの追加、リスト内のアイテムへのアクセスなど、基本的なPython リストトピックに精通している必要があります。

リストから特定の項目を削除する方法

Python list に対して実行する一般的な操作の 1 つは、特定のリスト項目を削除することです。リスト内の位置または値に基づいて項目を削除する必要がある場合があります。

このタスクを実行する方法を説明するために、公共図書館の Web サイトを作成していると仮定します。 Web アプリを使用すると、ユーザーは読みたい本のリストを保存できます。また、リストの並べ替えだけでなく、リストから書籍を編集したり削除したりすることもできるようにする必要があります。

Python リストを使用して、ユーザーの読書リストを本のタイトルのコレクションとして保存できます。たとえば、読書リストは次のようになります。

>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]

書籍のリストが作成できたので、リストから 1 つの特定の書籍を削除する方法がいくつかあります。 1 つの方法は、.pop() メソッドを使用することです。

.pop() メソッドを使用した項目の削除

場合によっては、リスト内の特定の位置にある項目を削除する必要がある場合があります。たとえば、公共図書館アプリでは、ユーザーはユーザー インターフェイスのチェックボックスをオンにして、削除する書籍を選択できます。アプリは、リスト内の項目の位置であるインデックスに基づいて、選択された各項目を削除します。

削除する項目のインデックスがわかっている場合は、.pop() メソッドを使用できます。このメソッドは、項目のインデックスをオプションの引数として受け取り、そのインデックスにある項目を削除して返します。メソッド呼び出しにインデックス引数を渡さない場合、.pop() はリストの最後の項目を削除して返します。

Pythonリストは、ポジショニングにゼロベースのインデックスを使用していることに注意してください。つまり、リストの最初の要素はインデックス0、2番目の要素はインデックス1などです。それを念頭に置いて、 .pop()を使用して books リストの最初の要素を削除および表示する方法の例を次に示します。

>>> books.pop(0)
'Dragonsbane'

0 リストのメソッドを 0 のインデックスを呼び出し、リストの最初の要素を示します。この呼び出しは、リストから最初のタイトル dragonsbane を削除してから返します。

このコードを実行した後にリストのコンテンツを確認すると、 dragonsbane がもうそこにないことに気付くでしょう。

>>> books
['The Hobbit', 'Wonder', 'Jaws']

ここでは、.pop() 呼び出しの後に書籍リストを再度表示します。 .pop() によって最初のタイトルが削除されたため、リストの要素が 1 つ短くなっていることがわかります。

チュートリアルの前半で学習したように、.pop() は項目を削除し、その値も返します。その値は他の操作に使用できます。たとえば、図書館アプリでユーザーが読んだ本の別のリストを保存できるとします。ユーザーは本を読んだ後、最初の本のリストからその本を削除し、そのタイトルを既読リストに転送できます。

>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> read_books = []

>>> read = books.pop(0)
>>> read_books.append(read)

>>> read_books
['Dragonsbane']
>>> books
['The Hobbit', 'Wonder', 'Jaws']

例の2行目では、ユーザーが読んだ本の名前を保存するために、 read_books という新しい空のリストを作成します。次に、 .pop()メソッドを使用して、最初のタイトルを元の本リストから削除し、変数に保存します。次に、 .append()を使用して、 read_books リストに保存されたタイトルを追加します。

両方のリストの内容を検査すると、読み取りリストに最初の削除されたタイトルが含まれており、元の本リストにはタイトルが含まれていないことがわかります。

空のリストで .pop() メソッドを呼び出すと、メソッドは IndexError 例外を発生させます。

>>> books.pop()
'Jaws'
>>> books.pop()
'Wonder'
>>> books.pop()
'The Hobbit'

>>> books.pop()
Traceback (most recent call last):
  ...
IndexError: pop from empty list

この例では、リストに対して .pop() を繰り返し呼び出して、リスト内の各タイトルを削除します。 .pop() への最後の呼び出しでは、空のリストでメソッドを呼び出しているため、IndexError 例外が発生します。

.pop() メソッドは、リスト サイズから 1 を引いた値より大きいインデックス引数を指定して呼び出すと、IndexError も発生します。

>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.pop(50)
Traceback (most recent call last):
  ...
IndexError: pop index out of range

このコード スニペットでは、元の書籍リストに対して .pop() を呼び出します。このリストには 4 つの要素のみが含まれています。インデックス 50 の項目に対して .pop() メソッドを使用しましたが、リストがそれほど大きくないため、これは範囲外であり、IndexError が発生します。

ネガティブインデックスを .pop()の引数として使用すると、リストの先頭から開始するのではなく、リストアイテムを右から左に削除できます。たとえば、-1インデックスはリストの最後のアイテムにアクセスし、-2インデックスは2番目の項目にアクセスします。このパターンによると、 books [-len(books)] は、最初の項目を返すネガティブインデックスです。

次の例は、.pop() で負のインデックスを使用してリストから最後の項目を削除する方法を示しています。

>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.pop(-1)
'Jaws'

>>> books
['Dragonsbane', 'The Hobbit', 'Wonder']

-1 を引数として使用して、リストの .pop() を呼び出します。このインデックスにより、最後のタイトルであるジョーズがリストから削除されます。リストの内容を再度確認すると、最後の項目が削除されていることがわかります。引数なしで books.pop() を呼び出しても、同じ効果が得られます。

del ステートメントによる項目の削除

del ステートメントを使用して、特定のインデックスからアイテムを削除することもできます。 .pop()メソッドのように、 del は、指定された位置でアイテムを削除しますが、値は返されません。

説明するために、Public Libraryアプリのユーザーが誤っていくつかの本をリストに2回追加したとします。次の例は、 del を適切に使用して、本のタイトルを削除する方法を示しています。

>>> >>> books = [
...     "Dragonsbane",
...     "The Hobbit",
...     "Wonder",
...     "Wonder",
...     "Jaws",
...     "Jaws",
... ]

>>> del books[2]
>>> books
['Dragonsbane', 'The Hobbit', 'Wonder', 'Jaws', 'Jaws']

強調表示された行で、最初に del キーワード、次にリスト変数名を書き、次に四角いブラケットに目的のインデックスが続きます。

.pop()メソッドと同様に、 del ステートメントでネガティブインデックス値を使用して、リストの最後からアイテムを削除することもできます。

>>> del books[-1]

リストの最後の項目を del ステートメントで削除しますが、値は返されません。何らかの理由で削除された値を保存する必要がある場合は、代わりに .pop()メソッドを使用します。

.pop()メソッドと同様に、無効なインデックスを持つリストに del を使用しようとすると、 indexerror 例外が表示されます。 :

>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> del books[100]
Traceback (most recent call last):
  ...
IndexError: list assignment index out of range

ブックリストには4つの項目のみが含まれていますが、 100 のインデックスを使用してリストで del を実行しようとします。このインデックスは、位置 100 にアイテムがないため、範囲外です。

.pop()とは異なり、 del ステートメントでインデックス値を提供する必要があります。そうでない場合、プログラムは syntaxerror を上げます:

>>> del books[]
  File "<input>", line 1
    del books[]
              ^
SyntaxError: invalid syntax

インデックスなしで del ステートメントを実行すると、インデックス作成演算子にはターゲットインデックスが必要なため、 syntaxerror 例外が表示されます。このステートメントは、引数なしで .pop()を呼び出すように、リストの最後の項目を削除しません。

.remove()メソッドで値でアイテムを削除します

Book Listアプリには、ユーザーがリストから削除するタイトルを入力できるテキストフィールドが提供されるとします。

インデックスではなく値によってリストから項目を削除する場合は、.remove() メソッドを使用できます。引数として単一の値が必要で、その値に一致するリスト内の最初の項目が削除されます。

>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.remove("The Hobbit")
>>> books
['Dragonsbane', 'Wonder', 'Jaws']

この例の2行目で、 .remove()を呼び出して、本のリストから hobbit を削除します。更新されたリストを表示すると、Hobbit が正常に削除されたことがわかります。

次のコードに示すように、このメソッドは .remove()をリストに載っていない値で呼び出すと、 valueerror 例外を提起します。

>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> books.remove("The Two Towers")
Traceback (most recent call last):
  ...
ValueError: list.remove(x): x not in list

また、.pop() とは異なり、値を渡さずに .remove() を呼び出すことはできません。

>>> books.remove()
Traceback (most recent call last):
  ...
TypeError: list.remove() takes exactly one argument (0 given)

ここでは、引数を渡すことなく .remove()を呼び出します。その結果、メソッドに引数が必要であることを説明する typeRror メッセージを受信します。

リストの一部を削除します

ユーザーは、リストから複数のアイテムを一度に削除する必要がある場合があります。 Public Libraryアプリには、電子メールサービスやショッピングサイトと同様に、ページごとに特定の数のアイテムを表示し、ユーザーがそのページのすべてのアイテムを一度に選択および削除できるようにします。

リストにページごとに25個のアイテムが表示されている場合、ユーザーが各アイテムをクリックとして削除し、それぞれを個別にクリックして削除するのではなく、チャンクとして削除する方が速くなります。

このタイプの削除は、 del ステートメントを使用して実行できます。これは、特定のインデックスからアイテムを削除するために以前に使用しました。 del ステートメントでは、リストのスライスを一度に削除することもできるため、単一のインデックス引数を提供する代わりに、コロンで区切られた包括的な開始位置と排他的なエンド位置を渡します。

次に、del ステートメントは、そのインデックス範囲内にあるリスト内のすべての項目を削除します。たとえば、最初の 3 冊の本をリストから削除するとします。

>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws"]
>>> del books[0:3]
>>> books
['Jaws']

2行目では、リストスライスを削除する del ステートメントコールを呼び出します。次に、更新されたリストを表示します。これは、最初の3つのアイテムが削除されたことを示しています。インデックス値はindex 0 で始まり、index 3 を含めないでください。そのため、コードでは、リストから最初の3つのタイトルを削除しました。

以下の例に示すように、del で負のインデックス値を使用してリスト項目の範囲を削除することもできます。

>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws", "It"]
>>> del books[-3:-1]
>>> books
['Dragonsbane', 'The Hobbit', 'It']

この例では、2行目では、インデックス-3( wonder エントリ)から始まる本を削除しますが、index -1( it <<)。ネガティブインデックスでは、リストの最後からアイテムを後方にカウントすることを忘れないでください。たとえば、 del Books [-3:-1] ステートメントは、この場合の del Books [2:4] に相当します。

リストからすべての項目をクリア

ユーザーがブックリストを完全にクリアしたいとします。 .clear()メソッドを使用して、すべてのアイテムをリストから削除できます。これがどのように機能しますか:

>>> books = ["Dragonsbane", "The Hobbit", "Wonder", "Jaws", "It"]
>>> books.clear()
>>> books
[]

最初の行では、 .clear()メソッドを呼び出します。これは、引数を取得せず、リストからすべてのアイテムを削除します。次に、操作の後、 books をpythonシェルで検査します。これは、リストが空になっていることを確認します。

ループを使用して重複を削除する

リスト内の重複エントリを許可するアプリを開発しているとします。たとえば、連絡帳アプリでは、電話番号は同じだが名前が異なる複数の連絡先を許可する場合があります。この場合、重複した電話番号が含まれるリストが表示される可能性があります。

リストから重複を削除するには、ループとリスト メソッドを組み合わせて使用します。このアプローチには、リストを反復処理し、その値が複数出現する場合にその値の各インスタンスを削除することが含まれます。

前に、 .remove() メソッドが value 引数に一致する項目の最初のインスタンスのみを削除する方法を見てきました。次に、これをループで使用する方法を見てみましょう。

わかりやすくするために、最初の 2 桁の国コードを含む短い電話番号を持つ国で連絡帳アプリが使用されていると想像してください。また、リスト内の番号の順序が重要であるとします。連絡先リストは次のようになります。

>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]

まず、リストに数値が表示される回数を判断する必要があります。 Pythonは .count()メソッドを提供し、リスト内の指定された値の発生数を返します。

たとえば、 .count()を使用して、連絡先リストに数値 54123 が表示される回数を判断できます。

>>> phone_numbers.count("54123")
3

.count() を呼び出すと 3 が返され、リスト内に電話番号のインスタンスがいくつあるかがわかります。次に、重複を削除するループを作成します。数値のインスタンスが複数存在するかどうかを確認し、数値が 1 つだけ残るまで重複するものをそれぞれ削除するループを作成できます。

.count() メソッドとループを使用すると、連絡先リストを反復処理し、カウントが 1 より大きい限り、番号ごとにインスタンスの 1 つを削除できます。

>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]

>>> for phone_number in phone_numbers[:]:
...     while phone_numbers.count(phone_number) > 1:
...         phone_numbers.remove(phone_number)
...

>>> phone_numbers
['54456', '54789', '54123']

この例では、重複する電話番号のリストが表示されます。 2 行目では、各数値を一度に 1 つずつ調べる for ループを設定します。数値のカウントが 1 より大きい場合、その数値を引数としてリストに対して .remove() を呼び出します。ループが終了すると、重複のないリストが作成されます。最終的なリストの順序は、各項目の最後に出現した順序に基づいていることに注意してください。

複製を削除するためのより簡潔な方法については、辞書を使用することもできます。辞書は、値にマッピングされた一意のキーの連想コレクションを表すPythonデータ型です。辞書には重複キーが含まれないため、 .fromkeys()メソッドを使用して、リストからコピーを削除できます。

>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]

>>> phone_numbers = list(dict.fromkeys(phone_numbers))

>>> phone_numbers
['54123', '54456', '54789']

.fromkeys() メソッドを使用して、リストを重複キーのない辞書に変換します。次に、辞書を変換して、重複が削除されたリストに戻します。辞書は挿入順序を保持するため、重複排除されたリスト内の要素が元のリストと同じ順序で配置されることが保証されます。この方法では、最終的な順序は各項目の最初の出現の順序に対応します。

セットを使用して重複を削除する

前述の連絡帳の例では、リスト内の番号の順序が重要でした。ただし、リスト内の重複する項目を削除したいが、項目の順序を気にしない場合は、リストの代わりにセットを使用することを検討してください。 set は、項目の重複を許可しない Python の組み込みコレクション タイプです。

以下の例は、リストを一意の電話番号に変換する方法を示しています。

>>> phone_numbers = ["54123", "54123", "54456", "54789", "54789", "54123"]

>>> set(phone_numbers)
{'54123', '54789', '54456'}

強調表示された行では、set() を使用してリストをセットに変換し、重複するエントリをすべて削除します。セットは順序付けされていないコレクションであるため、リスト項目が元の順序で配置されることは保証されないことに注意してください。この動作のため、プロジェクトで項目の順序を維持する必要がある場合、セットは使用するのに適切なデータ型ではない可能性があります。

ただし、セットをリストに並べ替えることはできます。これは、連絡先リストやその他の同様のアプリにとって重要な要件となることがよくあります。また、効率的なメンバーシップ テストもサポートされているため、コレクションに値が存在するかどうかをすばやく確認できます。

結論

位置または値に基づいて、Python の list から項目を削除するためのさまざまなテクニックを学習しました。 .pop().remove().clear() などのメソッドを調べました。 del ステートメントについても学習しました。これらの各ツールは、リスト操作に対する独自のアプローチを提供します。さらに、ループ、ディクショナリ、セットなどの他のアプローチを使用して重複を削除する方法についても詳しく説明しました。

リストは Python の基本的なデータ型であるため、リスト操作について学ぶことは Python 開発者にとって不可欠です。

このチュートリアルでは、方法を学びました:

  • .pop()del を使用してインデックスを作成し、リストから項目を削除します。
  • .remove() メソッドを使用して、最初に出現した指定値を削除します。
  • del ステートメントを使用してリストからスライスまたは部分を削除します。
  • .clear() メソッドを使用してリストからすべての項目を削除します。
  • ループ辞書、またはセットを使用して重複アイテムを削除します。

これらのスキルを使用すると、Python プロジェクトでリストを効率的に操作できるようになり、コードがより堅牢になり、さまざまなデータ処理のニーズに適応できるようになります。