>>> 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]
>>>
목록에서 요소를 제거하는 위의 세 가지 방법 사이에 차이점이 있습니까?
>>> 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]
>>>
목록에서 요소를 제거하는 위의 세 가지 방법 사이에 차이점이 있습니까?
답변:
예, 특정 색인이 아닌 첫 번째 일치하는 값을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
예는 다소 오해의 소지가 있습니다. 정확히 어떤 요소가 제거됩니까? 두 번째 또는 세 번째? 당신은 사용해야 [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
전체 설명자 프로토콜을 따라 조회 해야합니다. 함수 자체를 실행하는 데 동일한 시간이 걸립니다. 둘 다 포인터를 반환합니다. 하나는 제거 된 개체에, 다른 하나는에 반환합니다 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 () : 접두사 메서드입니다.
동일한 방법에 대해 두 가지 다른 구문 인 []와 ()를 주시하십시오. 그것은 다음과 같은 힘을 가지고 있습니다.
1. 인덱스 삭제
del a[index]
=> pop과 같이 인덱스와 관련 값을 삭제하는 데 사용됩니다.
>>>del a[1]
>>>a
[0, 1, 4, 6, 5]
2. [index 1 : index 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()
작업은 무언가를 반환해야합니다. 그래서, 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
일반적인 팝 사용은 목록을 스택으로 사용할 때 목록에서 마지막 항목을 삭제하는 것입니다. del과 달리 pop은 목록에서 튀어 나온 값을 반환합니다. 선택적으로 목록 끝 이외의 곳에서 pop과 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이 무엇이든 상관 없음)