回答:
はい、特定のインデックスではなく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
構文ホールドオーバーではありません。return
or if
またはと同様に、構文は変更されていませんwhile
。
del
例はやや誤解を招くものです。正確にどの要素が削除されますか?2番目か3番目か?あなたが使用している必要があり[9, 8, 7, 6]
、del a[1]
そして[9, 7, 6]
使用しdel
、インデックスで要素を削除するにはpop()
、あなたが返された値が必要な場合は、インデックスによってそれを削除して、remove()
値によって要素を削除します。後者はリストを検索する必要ValueError
があり、そのような値がリストにない場合に発生します。
要素のi
リストからインデックスを削除する場合n
、これらのメソッドの計算の複雑さは
del O(n - i)
pop O(n - i)
remove O(n)
del
は少し高速ですが、別の理由もあります__delitem__
。Cで実装された型の検索は、名前ではなくインデックスによってpop
行われますが、記述子プロトコル全体に従って検索する必要があります。関数自体の実行にも同じ時間がかかるはずです。どちらもポインタを返します– 1つは削除されたオブジェクトへ、もう1つはへNone
。
他の誰もそれについて言及していないので、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]
多くの最良の説明がここにありますが、もっと簡単にするために最善を尽くします。
これらすべてのメソッドの中で、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
混乱があれば明確にしてください。
さまざまなデータ構造に対する操作/関数は、特定のアクションに対して定義されます。ここであなたの場合すなわち要素の削除、削除、ポップ、削除。(セットを検討する場合は、別の操作を追加-破棄)他の混乱するケースは、追加中です。挿入/追加。デモンストレーションのために、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.
上記のコメントに記載されているように、popとdeleteはどちらもインデックスを使用して要素を削除します。主な違いは、それらの時間の複雑さです。インデックスのないpop()の時間の複雑さはO(1)ですが、最後の要素の削除の場合とは異なります。
ユースケースが常に最後の要素を削除することである場合は、常にdelete()よりもpop()を使用することをお勧めします。時間の複雑さの詳細については、https://www.ics.uci.edu/~pattis/ICS-33/lectures/complexitypython.txtを参照してください。
delete
。違いはpop
、値を返すことと、del
スライスで機能することです。がpop
機能する場合、del
計算の複雑度はまったく同じです(定数項の方がわずかに高速です)。
リストの削除操作には、削除する値が与えられます。リストを検索してその値を持つアイテムを見つけ、最初に一致したアイテムを削除します。一致するアイテムがない場合はエラーで、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への引数として特定のリストアイテムがある場合(たとえば、リストの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を参照してください。
削除は基本的に値に対して機能します。インデックスの削除およびポップ作業
削除は基本的に最初に一致した値を削除します。Deleteは特定のインデックスからアイテムを削除します。Popは基本的にインデックスを取得し、そのインデックスの値を返します。次にリストを印刷するとき、値は表示されません。
removeを使用して、インデックスによって値を削除することもできます。
n = [1, 3, 5]
n.remove(n[1])
nは[1、5]を参照します
n = [5, 3, 5]
、その後、n.remove(n[2])
。
n.remove(n[2])
は削除しますがn[0]
、削除しませんn[2]
。したがって、それは理由のない単なる線形時間ではなく(N = 3の場合は大したことではないかもしれません)、それも間違っています(Nが何であっても大したことです)