1143
>>> a=[1,2,3]
>>> a.remove(2)
>>> a
[1, 3]
>>> a=[1,2,3]
>>> del a[1]
>>> a
[1, 3]
>>> a= [1,2,3]
>>> a.pop(1)
2
>>> a
[1, 3]
>>> 

リストから要素を削除する上記の3つの方法に違いはありますか?

4

12 に答える 12

1616

リストから要素を削除するための3つの異なる方法の効果:

remove特定のインデックスではなく、最初に一致するを削除します。

>>> a = [0, 2, 3, 2]
>>> a.remove(2)
>>> a
[0, 3, 2]

del特定のインデックスのアイテムを削除します。

>>> a = [9, 8, 7, 6]
>>> del a[1]
>>> a
[9, 7, 6]

pop特定のインデックスにあるアイテムを削除して返します。

>>> a = [4, 3, 5]
>>> a.pop(1)
3
>>> a
[4, 5]

それらのエラーモードも異なります。

>>> a = [4, 5, 6]
>>> a.remove(7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
>>> del a[7]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: list assignment index out of range
>>> a.pop(7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: pop index out of range
于 2012-07-17T10:24:09.450 に答える
252

delインデックスで要素を削除pop()し、戻り値が必要な場合はインデックスで要素を削除し、値で要素を削除するために使用remove()します。最後はリストを検索する必要があり、ValueErrorそのような値がリストにない場合は発生します。

i要素のリストからインデックスを削除する場合n、これらのメソッドの計算の複雑さは次のとおりです。

del     O(n - i)
pop     O(n - i)
remove  O(n)
于 2012-07-17T10:25:04.817 に答える
115

他の誰もそれについて言及していないので、del(とは異なりpop)リストのスライスのためにインデックスの範囲を削除できることに注意してください。

>>> lst = [3, 2, 2, 1]
>>> del lst[1:]
>>> lst
[3]

IndexErrorこれにより、インデックスがリストにない場合の回避も可能になります。

>>> lst = [3, 2, 2, 1]
>>> del lst[10:]
>>> lst
[3, 2, 2, 1]
于 2017-01-16T10:27:18.193 に答える
67

すでに他の人からかなりよく答えられています。これは私の終わりから:)

削除vsポップvsデル

明らかにpop、値を返すのはこれremoveだけであり、オブジェクトを検索するのはこれだけですが、delそれ自体は単純な削除に限定されています。

于 2017-08-08T15:33:26.607 に答える
26

多くの良い説明がここにありますが、私はもっと単純化するために最善を尽くします。

これらすべてのメソッドの中で、removepop接尾辞であり、deleteは接頭辞です。

remove()要素の最初の出現を削除するために使用されます。=>リスト内の
remove(n)最初の出現。n

>>> a = [0, 2, 3, 2, 1, 4, 6, 5, 7]
>>> a.remove(2)   # where i = 2
>>> a
[0, 3, 2, 1, 4, 6, 5, 7]

pop()要素を削除するために使用されます...

  • インデックスが指定されていない場合:
    pop()=>リストの最後から
>>> a.pop()
>>> a
[0, 3, 2, 1, 4, 6, 5]
  • インデックスが指定されている場合:
    pop(index)=>インデックスの
>>> a.pop(2)
>>> a
[0, 3, 1, 4, 6, 5]

警告:危険な方法が先にあります

del():プレフィックス方式です。

同じメソッドの2つの異なる構文(あり[]となし)に注意してください。それは以下の力を持っています:

  • インデックスの削除
    del a[index]=>インデックスとそれに関連する値で削除するために使用されますpop
>>> del a[1]
>>> a
[0, 1, 4, 6, 5]
  • 範囲内の値を削除します[index_1:index_N]
    del a[0:3]=>範囲内の複数の値。
>>> del a[0:3]
>>> a
[6, 5]
  • 最後になりましたが、リスト全体を一度に削除します。
    del (a)=>上記のように。
>>> del (a)
>>> a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined

これが混乱を明らかにすることを願っています。

于 2018-08-26T15:34:04.240 に答える
22

ポップ

インデックスを取得し(指定されている場合は最後に取得)、そのインデックスの値を削除して、値を返します

削除する

値を取り、最初の出現を削除し、何も返しません

消去

インデックスを取得し、そのインデックスの値を削除して、何も返しません

于 2015-02-07T06:51:53.363 に答える
2

さまざまなデータ構造に対する操作/機能は、特定のアクションに対して定義されています。ここであなたの場合、すなわち要素を削除し、削除し、ポップして削除します。(セットを検討する場合は、別の操作を追加します-破棄します)他の紛らわしいケースは、追加中です。挿入/追加。デモンストレーションのために、dequeを実装しましょう。dequeは、要素を追加したり、両端から要素を削除したりできるハイブリッド線形データ構造です。(リアエンドとフロントエンド)

class Deque(object):

  def __init__(self):

    self.items=[]

  def addFront(self,item):

    return self.items.insert(0,item)
  def addRear(self,item):

    return self.items.append(item)
  def deleteFront(self):

    return self.items.pop(0)
  def deleteRear(self):
    return self.items.pop()
  def returnAll(self):

    return self.items[:]

ここで、操作を参照してください。

def deleteFront(self):

    return self.items.pop(0)
def deleteRear(self):
    return self.items.pop()

操作は何かを返す必要があります。だから、ポップ-インデックスの有無にかかわらず。値を返したくない場合:del self.items [0]

インデックスではなく値で削除:

  • 削除する :

    list_ez=[1,2,3,4,5,6,7,8]
    for i in list_ez:
        if i%2==0:
            list_ez.remove(i)
    print list_ez
    

[1,3,5,7]を返します

セットの場合を考えてみましょう。

set_ez=set_ez=set(range(10))

set_ez.remove(11)

# Gives Key Value Error. 
##KeyError: 11

set_ez.discard(11)

# Does Not return any errors.
于 2017-07-10T17:29:41.893 に答える
2

ここに詳細な答えがあります。

delは任意のクラスオブジェクトに使用できますが、popとremoveは、特定のクラスにバインドされます。

にとってdel

下記は用例です

>>> a = 5
>>> b = "this is string"
>>> c = 1.432
>>> d = myClass()

>>> del c
>>> del a, b, d   # we can use comma separated objects

__del__ユーザーが作成したクラスのメソッドをオーバーライドできます。

リストでの特定の使用

>>> a = [1, 4, 2, 4, 12, 3, 0]
>>> del a[4]
>>> a
[1, 4, 2, 4, 3, 0]

>>> del a[1: 3]   # we can also use slicing for deleting range of indices
>>> a
[1, 4, 3, 0]

にとってpop

popインデックスをパラメータとして受け取り、そのインデックスの要素を削除します

とは異なりdelpopリストオブジェクトで呼び出されると、そのインデックスの値が返されます

>>> a = [1, 5, 3, 4, 7, 8]
>>> a.pop(3)  # Will return the value at index 3
4
>>> a
[1, 5, 3, 7, 8]

にとってremove

removeはパラメータ値を取り、その値をリストから削除します。

複数の値が存在する場合、最初のオカレンスが削除されます

Note:その値が存在しない場合、ValueErrorをスローします

>>> a = [1, 5, 3, 4, 2, 7, 5]
>>> a.remove(5)  # removes first occurence of 5
>>> a
[1, 3, 4, 2, 7, 5]
>>> a.remove(5)
>>> a
[1, 3, 4, 2, 7]

この回答がお役に立てば幸いです。

于 2020-10-09T13:17:30.103 に答える
1

上記のコメントに記載されているように、ポップと削除の両方でインデックスを取得して要素を削除します。主な違いは、それらの時間の複雑さです。インデックスのないpop()の時間計算量はO(1)ですが、最後の要素の削除の場合と同じではありません。

ユースケースが常に最後の要素を削除することである場合は、delete()よりもpop()を使用することを常にお勧めします。時間計算量の詳細については、https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txtを参照してください。

于 2016-09-04T20:22:11.320 に答える
1

リストの削除操作には、削除する値が与えられます。リストを検索してその値のアイテムを見つけ、最初に一致したアイテムを削除します。一致するアイテムがない場合はエラーであり、ValueErrorが発生します。

>>> x = [1, 0, 0, 0, 3, 4, 5]
>>> x.remove(4)
>>> x
[1, 0, 0, 0, 3, 5]
>>> del x[7]
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    del x[7]
IndexError: list assignment index out of range

delステートメントを使用して、リスト全体を削除できます。delへの引数として特定のリストアイテムがある場合(たとえば、リストの8番目のアイテムを具体的に参照するlistname [7])、そのアイテムは削除されます。リストから「スライス」を削除することも可能です。インデックスが範囲外の場合はエラーであり、IndexErrorが発生します。

>>> x = [1, 2, 3, 4]
>>> del x[3]
>>> x
[1, 2, 3]
>>> del x[4]
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    del x[4]
IndexError: list assignment index out of range

popの通常の使用法は、リストをスタックとして使用するときに、リストから最後の項目を削除することです。delとは異なり、popはリストからポップした値を返します。オプションで、リストの最後以外からポップおよびポップするインデックス値を指定できます(たとえば、listname.pop(0)はリストから最初のアイテムを削除し、その最初のアイテムを結果として返します)。これを使用して、リストをキューのように動作させることができますが、pop(0)よりも優れたパフォーマンスでキュー操作を提供できるライブラリルーチンが利用可能です。インデックスが範囲外の場合はエラーであり、IndexErrorが発生します。

>>> x = [1, 2, 3] 
>>> x.pop(2) 
3 
>>> x 
[1, 2]
>>> x.pop(4)
Traceback (most recent call last):
  File "<pyshell#1>", line 1, in <module>
    x.pop(4)
IndexError: pop index out of range

詳細については、 collections.dequeを参照してください。

于 2018-08-09T17:13:30.230 に答える
-1

削除は基本的に値に作用します。インデックスの削除とポップ作業

削除は基本的に最初に一致する値を削除します。Deleteは、特定のインデックスからアイテムを削除します。Popは基本的にインデックスを取得し、そのインデックスの値を返します。次にリストを印刷するとき、値は表示されません。

例:

于 2019-11-28T11:03:40.437 に答える
-4

removeを使用して、インデックスごとに値を削除することもできます。

n = [1, 3, 5]

n.remove(n[1])

nは[1、5]を参照します

于 2012-10-16T00:41:36.737 に答える