아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
고결한친칠라53
고결한친칠라5320.10.13

파이썬 리스트 요소 제거(remove)에 대해서

'점프 투 파이썬' 이라는 책에

>>> a = [1, 2, 3, 1, 2, 3]

>>> a.remove(3)

[1, 2, 1, 2, 3]

이라고 돼있는데 a[:2]같은 것을 사용해서 0번째부터 2번째까지 한방에 없애는 명령어는 없나요 ?

55글자 더 채워주세요.
답변의 개수6개의 답변이 있어요!
  • 1.점프 투 파이썬' 이라는 책에

    >>> a = [1, 2, 3, 1, 2, 3]

    >>> a.remove(3)

    [1, 2, 1, 2, 3]

    이라고 돼있는데 a[:2]같은 것을 사용해서 0번째부터 2번째까지 한방에 없애는 명령어는 없나요 ?

    A: 지우는 것보다 그냥 슬라이스하는것이 좋겠습니다.

    그냥 a = a[3:] 하면 되겠습니다.

    제거하는것이 더 오래걸려요.


  • 흔히 쓰이는 세 가지 방법을 소개시켜드리겠습니다.

    1. a[:2] 같은 것을 사용해서 0번째부터 2번째까지 한방에 없애는 명령어

    a_filtered = a[2:] # 2번째 부터 마지막까지 걸러줍니다.

    a[:2]는 "index가 2되기 직전까지 추출하라"이고, a[2:]는 "index가 2될 때부터 끝까지 추출하라"입니다. a[2:4]은 "index가 2가 될 때부터 추출하고, 4 직전까지 추출하라"이기 때문에 index가 2와 3인 부분만 추출됩니다.

    한마디로, "x:y"는 "x부터 y직전까지의 요소들을 추출해라"입니다.

    2. for loop 혹은 while loop과 remove 사용

    a_filtered=[] # 빈 배열 선언 for element in a: # element 마다 loop돌리기 if element is not 2: # 만약 element가 2가 아니라면, a_filtered.push(element) # 새 배열에 추가해주기.

    3. list comprehension 사용

    [value for value in a if value != 2]


    • del 키워드를 통한 삭제

    >>> a = [1, 2, 3, 4, 5, 6, 7] >>> del a[1] >>> a [1, 3, 4, 5, 6, 7]
    • list의 remove메소드에 의한 삭제

    • list.remove(찾을아이템)

    • 찾을 아이템이 없으면 ValueError 발생

    >>> a = [1, 2, 3, 4, 5, 6, 7] >>> a.remove(3) >>> a [1, 2, 4, 5, 6, 7] >>> a.remove(9) Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: list.remove(x): x not in list
    • del키워드와 리스트의 index메소드와 혼합하여 사용하면 remove효과가 남

    >>> a = [1, 2, 3, 4, 5, 6, 7] >>> del a[a.index(3)] >>> a [1, 2, 4, 5, 6, 7]

    https://wikidocs.net/16040

    위 링크 자료를 참고하시면 되겠습니다.

    인덱스 0부터 2까지 일괄적으로 삭제하려면 iterate 작업이 추가적으로 붙어야될것 같네요.


  • del 리스트명[인덱스]

    del 키워드를 통해 리스트명에 인덱스를 넣어주면 해당 인덱스에 위치한 요소가 지워집니다.

    >>> a = [1, 2, 3, 1, 2, 3] >>> del a[1] 출력 [1, 3, 1, 2, 3]

    del을 통한 삭제는 슬라이싱을 통해 여러개를 한번에 삭제도 할 수 있습니다. slice 방식으로 1:3은 1, 2번 인덱스를 뜻합니다.

    >>> a = [1, 2, 3, 1, 2, 3] >>> del a[1:3] 출력 [1, 1, 2, 3]


  • 네, 그런 명령어는 없습니다. 그런 명령어를 구현할려면 추가 함수를 구현해주셔야 됩니다.

    그런데 왜 a[:] 이것을 사용 안하고 제거할려고 하시는건가요?

    a = a[2:-1]

    이렇게 구현해주시게 되면은 0부터 2개 slice한 것과 같이 remove한 것과 똑같은 역할을 수행합니다.

    한번 참고해 보시길 바랍니다.


  • 리스트에서 원소를 삭제하는 함수는 del 함수와 remove 함수가 있지만 이 함수들은 원소를 하나씩 밖에 삭제하지 못합니다. del 함수나 remove 함수를 사용하여 여러 개의 원소를 삭제하기 위해서는 해당 함수를 여러 번 사용해야 하는 방법 밖에 없습니다.

    다만, a = a[3:] 와 같은 명령을 사용해서 3번째부터 마지막 원소까지 들어있는 리스트를 다시 변수 a에 저장하면 0번째부터 2번째까지의 원소들이 삭제된 리스트를 만들 수 있습니다.