>>> 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つの方法に違いはありますか?
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
インデックスで要素を削除するには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]
pop - インデックスを取り、値を返す
remove - 値を取り、最初の出現を削除し、何も返しません
delete - インデックスを取り、そのインデックスの値を削除し、何も返しません
たくさんの最も良い説明がここにあります、しかし私はもっと単純化するために最善を尽くします。
これらすべてのメソッドの中で、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 を参照してください。
リストの 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 をご覧ください。