[python] 목록에서 델, 제거 및 팝의 차이점

>>> 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, 인덱스로 요소를 제거하기 위해 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유일한 개체이며 개체를 검색하는 유일한 개체이며 del간단한 삭제로 제한됩니다.


답변

많은 최고의 설명이 여기 있지만 더 단순화하기 위해 최선을 다할 것입니다.

이러한 모든 방법 중에서 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

이것이 혼란을 명확히하기를 바랍니다.


답변

pop-인덱스를 가져 와서 Value를 돌려줍니다

remove-값을 취하고 첫 번째 발생을 제거하며 아무것도 리턴하지 않습니다.

delete-인덱스를 가져와 해당 인덱스에서 값을 제거하고 아무것도 반환하지 않습니다.


답변

다른 데이터 구조에 대한 모든 작업 / 기능은 특정 작업에 대해 정의됩니다. 귀하의 경우에는 요소를 제거하고 삭제하고 팝하고 제거하십시오. (세트를 고려하면 다른 작업 추가-삭제) 다른 혼란스러운 사례는 추가하는 동안입니다. 삽입 / 추가. 데모를 위해 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

반환 값 [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.