web-dev-qa-db-ja.com

リストの削除、削除、ポップの違い

>>> 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つの方法に違いはありますか?

565
sachin irukula

removeは特定のインデックスではなく、 first matching value を削除します。

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

delは特定のインデックスにある項目を削除します。

>>> a = [3, 2, 2, 1]
>>> del a[1]
>>> a
[3, 2, 1]

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
817
Martijn Pieters

インデックスで要素を削除するにはdelを、戻り値が必要な場合はインデックスで削除するにはpop()を、値で要素を削除するにはremove()を使用します。後者はリストを検索する必要があり、そのような値がリストに現れなければValueErrorを上げます。

i要素のリストからインデックスnを削除すると、これらのメソッドの計算量は次のようになります。

del     O(n - i)
pop     O(n - i)
remove  O(n)
115
Sven Marnach

他にだれもそれを述べていないので、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]
57
Chris_Rands

他人からはかなりよく答えられています。これは私の最後から:)

remove vs pop vs del

明らかに、popは値を返す唯一のもので、removeはオブジェクトを検索する唯一のものですが、delはそれ自体を単純な削除に限定します。 

34
Saurav Sahu

pop - インデックスを取り、値を返す

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

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

12
Bahubali Patil

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

これらすべてのメソッドの中で、reverse&popは postfix であり、deleteは prefix です。

remove(): 最初に出現した要素を削除します

remove(i) => i値の最初の出現 

>>> 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]

警告:危険な方法は先に

delete() :そのプレフィックスメソッド。 

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

1.インデックスを削除する 

del a[index] => popのようにインデックスとその関連値を削除するために使用されます。

>>>del a[1]
>>>a
[0, 1, 4, 6, 5]

2.範囲内の値を削除する[インデックス1:インデックスN] 

del a[0:3] =>範囲内の複数の値

>>>del a[0:3]
>>>a
[6, 5]

3.リストは最後まで表示しますが、リスト全体を一度に削除するには 

上記のようにdel (a) =>。

>>>del (a)
>>>a

混乱がある場合は、これが明確になることを願っています。

3
Mayur Patil

異なるデータ構造に対する操作/機能は、特定のアクションに対して定義されています。ここでは、要素の削除、削除、ポップ、削除を行います。 (あなたが集合を考えるならば、別の操作を加えなさい - 捨てる)他の混乱を招くケースは、加えている間である。挿入/追加デモンストレーションのために、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.
1
phanindravarma

Popとdeleteはどちらも上記のコメントで述べたように要素を削除するためのインデックスを取ります。主な違いはそれらの時間の複雑さです。インデックスのないpop()の時間の複雑さはO(1)ですが、最後の要素を削除した場合と同じではありません。

あなたのユースケースが常に最後の要素を削除することである場合、それは常にdelete()よりもpop()を使用することが好ましいです。時間の複雑さに関する詳細な説明は、 https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txt を参照してください。 

0
skashyap

リストの remove 操作には、削除する値が与えられます。リストを検索してその値を持つアイテムを見つけ、見つかった最初に一致するアイテムを削除します。一致する項目がない場合はエラーです。 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 をご覧ください。

0