>>> 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つの方法に違いはありますか?
リストから要素を削除するための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
del
インデックスで要素を削除pop()
し、戻り値が必要な場合はインデックスで要素を削除し、値で要素を削除するために使用remove()
します。最後はリストを検索する必要があり、ValueError
そのような値がリストにない場合は発生します。
i
要素のリストからインデックスを削除する場合n
、これらのメソッドの計算の複雑さは次のとおりです。
del O(n - i)
pop O(n - i)
remove O(n)
他の誰もそれについて言及していないので、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]
多くの良い説明がここにありますが、私はもっと単純化するために最善を尽くします。
これらすべてのメソッドの中で、remove
&pop
は接尾辞であり、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
これが混乱を明らかにすることを願っています。
ポップ
インデックスを取得し(指定されている場合は最後に取得)、そのインデックスの値を削除して、値を返します
削除する
値を取り、最初の出現を削除し、何も返しません
消去
インデックスを取得し、そのインデックスの値を削除して、何も返しません
さまざまなデータ構造に対する操作/機能は、特定のアクションに対して定義されています。ここであなたの場合、すなわち要素を削除し、削除し、ポップして削除します。(セットを検討する場合は、別の操作を追加します-破棄します)他の紛らわしいケースは、追加中です。挿入/追加。デモンストレーションのために、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
セットの場合を考えてみましょう。
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.
ここに詳細な答えがあります。
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
インデックスをパラメータとして受け取り、そのインデックスの要素を削除します
とは異なりdel
、pop
リストオブジェクトで呼び出されると、そのインデックスの値が返されます
>>> 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]
この回答がお役に立てば幸いです。
上記のコメントに記載されているように、ポップと削除の両方でインデックスを取得して要素を削除します。主な違いは、それらの時間の複雑さです。インデックスのないpop()の時間計算量はO(1)ですが、最後の要素の削除の場合と同じではありません。
ユースケースが常に最後の要素を削除することである場合は、delete()よりもpop()を使用することを常にお勧めします。時間計算量の詳細については、https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txtを参照してください。
リストの削除操作には、削除する値が与えられます。リストを検索してその値のアイテムを見つけ、最初に一致したアイテムを削除します。一致するアイテムがない場合はエラーであり、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を参照してください。
removeを使用して、インデックスごとに値を削除することもできます。
n = [1, 3, 5]
n.remove(n[1])
nは[1、5]を参照します