Original article: Python List .remove() - How to Remove an Item from a List in Python

이 글에서는 파이썬 내장 함수 remove() list 메소드를 사용하는 법을 배우게 될 것입니다.

마지막에 이르면 파이썬에서 리스트 안에 항목을 제거하기 위해 remove()를 사용하는 법을 알게 될 것입니다.

우리가 다룰 내용들은:

  1. remove() 메소드의 문법(syntax)
  2. remove()를 사용하여 리스트의 구성요소를 제거
  3. remove()는 어떤 항목의 첫번째 발생 경우만 삭제; 어떤 항목이 발생하는 모든 경우를 제거하는 방법

remove() 메소드 - 문법 개요

remove() 메소드는 파이썬에서 리스트 안에 항목을 제거할 수 있는 방법 중 하나입니다.

remove() 메소드는 리스트에서 항목을 으로 삭제하며, 인덱스 번호로는 삭제하지 않습니다.

remove() 메소드의 일반적인 문법(syntax)는 아래와 같습니다:

list_name.remove(value)

구체적으로 살펴보면:

  • list_name은 작업하고자하는 리스트 이름입니다.
  • remove()는 파이썬에 내장된 리스트 메소드 중 하나입니다.
  • remove()는 하나의 필수 인수(argument)를 받습니다. 이를 제공하지 않으면 TypeError를, 구체적으로는TypeError: list.remove() takes exactly one argument (0 given) 를 받게 됩니다.
  • valuelist_name에서 제거하고 싶은 항목의 특정 값입니다.

remove() 메소드는 제거된 값을 반환하지 않고 그 대신 반환 값이 없다는 뜻의 None을 반환합니다.

인덱스 번호를 통해 항목을 삭제해야 하거나 어떤 이유로든 제거된 값을 반환 (저장)하고 싶다면 pop() 메소드를 대신 사용하세요.

파이썬에서 remove() 메소드를 사용해 리스트에서 구성요소를 삭제하는 방법

remove() 메소드를 사용해 리스트에서 구성요소를 삭제하기 위해서는 해당 구성요소의 값을 특정하고 메소드에 인자로 넘기면 됩니다.

remove()는 그 값을 찾기 위해 리스트을 검색하고 값을 삭제할 것입니다.

#original list
programming_languages = ["JavaScript", "Python", "Java", "C++"]

#print original list
print(programming_languages)

# remove the value 'JavaScript' from the list
programming_languages.remove("JavaScript")

#print updated list
print(programming_languages)

#output

#['JavaScript', 'Python', 'Java', 'C++']
#['Python', 'Java', 'C++']

만약 리스트 안에 포함되어 있지 않은 값을 특정한다면 에러를 - 구체적으로는 ValueError를 받을 것입니다:

programming_languages = ["JavaScript", "Python", "Java", "C++"]

#I want to remove the value 'React'
programming_languages.remove("React")

#print list
print(programming_languages)

#output

# line 5, in <module>
#programming_languages.remove("React")
#ValueError: list.remove(x): x not in list

에러가 발생하는 것을 방지하기 위해 첫번째로 할 수 있는 일은 in 키워드를 사용하여 리스트 안에 삭제하고자 하는 해당 값으로 시작하는 항목이 있는지 확인하는 것입니다.

논리 값(Boolean value) - 리스트 안에 항목이 있다면 True를, 해당 값이 리스트 안에 없다면 False를 반환할 것입니다.

programming_languages = ["JavaScript", "Python", "Java", "C++"]

#check if 'React' is in the 'programming_languages' list
print("React" in programming_languages)

#output
#False

에러를 방지하기 위한 다른 방법은 조건문을 생성해서 "만약 이 값이 리스트 안에 있으면 삭제하라. 존재하지 않으면 리스트 안에 포함되어 있지 않다고 말하는 메세지를 보여라"고 할 수 있습니다.

programming_languages = ["JavaScript", "Python", "Java", "C++"]

if "React" in programming_languages:
    programming_languages.remove("React")
else:
    print("This value does not exist")

#output
#This value does not exist

이제 존재하지 않는 특정한 값을 삭제하려다 파이썬 에러를 얻는 대신 작업하고 있는 리스트 안에 삭제하고 싶은 항목이 없다고 말하는 메세지를 돌려 받을 것입니다.

remove() 메소드는 어떤 항목의 첫번째 발생 경우만 제거

remove() 메소드를 사용할 때 유념해야 할 것은 어떤 항목의 첫번째* 발생 경우만 검색하고 삭제할 것이라는 점입니다.

이것은 메소드 인자로 넘긴 값을 가진 항목이 리스트 안에 하나 이상 존재한다면 첫번째 발생 경우만 삭제될 것을 의미합니다.

아래 예제를 살펴봅시다:

programming_languages = ["JavaScript", "Python", "Java", "Python", "C++", "Python"]

programming_languages.remove("Python")

print(programming_languages)

#output
#['JavaScript', 'Java', 'Python', 'C++', 'Python']

위의 코드에서 리스트 안에 Python이라는 값을 가진 항목은 세 차례 나타납니다.

remove()가 사용되었을 때 첫번째 일치하는 인스턴스(instance)만 삭제됩니다 - JavaScript 값 다음에 나오고 Java 값 앞에 있던 것 말입니다.

나머지 두 번의 Python 발생들은 리스트 안에 그대로 있습니다.

만약 어떤 항목이 발생하는 모든 경우를 제거하고 싶으면 어떻게 할까요?

다시 말하자면 특정한 항목의 첫번째 인스턴스만을 삭제하고 싶지 않을 경우도 있을 수 있습니다. 그리고 이것은 remove() 단독으로 사용해서는 이룰 수 없습니다

파이썬 리스트 안에 어떤 항목에 해당하는 모든 인스턴스를 제거하는 방법

리스트 안에 어떤 항목에 해당하는 모든 인스턴스를 제거하는 방법 중 하나는 리스트 축약(list comprehension)을 활용하는 것입니다.

리스트 축약이란 존재하고 있는 리스트로부터 새로운 리스트을 생성하거나 부분리스트(sublist)을 생성하는 것입니다.

이는 원본 리스트을 수정하지 않지만 설정한 조건을 만족하는 새로운 것을 대신 생성하게 될 것입니다.

#original list
programming_languages = ["JavaScript", "Python", "Java", "Python", "C++", "Python"]

#sublist created with list comprehension
programming_languages_updated = [value for value in programming_languages if value != "Python"]


#print original list
print(programming_languages)

#print  new sublist that doesn't contain 'Python'
print(programming_languages_updated)

#output

#['JavaScript', 'Python', 'Java', 'Python', 'C++', 'Python']
#['JavaScript', 'Java', 'C++']

위의 예제에서 원본 리스트 programming_languages이 있습니다.

그리고 새로운 리스트(또는 부분리스트)이 반환되었습니다.

부분리스트 안에 포함된 항목들은 조건을 만족해야만 합니다. 조건은 '원본 리스트 안에 Python이라는 값이 있는 항목이 있으면' 부분리스트에 일부가 되지 않는다는 것입니다.

이번에는 새로운 리스트을 만들고 싶지 않지만 대신 기존에 존재하던 리스트을 *대체(in-place)*하고 싶다고 해 본다면, 리스트 축약에 슬라이스(slice) 지정을 합하여 사용하세요.

슬라이스 지정이 되어 있을 때 리스트에서 특정 부분 (또는 슬라이스)를 수정하고 교체할 수 있습니다.

전체 리스트을 교체하기 위해서는 슬라이스 문법(slicing syntax) [:]를 리스트 축약과 같이 사용하세요.

리스트 축약은 Python이라는 값을 가진 어떤 항목이라도 더 이상 리스트 안에 자리할 수 없다는 조건을 설정합니다.

programming_languages = ["JavaScript", "Python", "Java", "Python", "C++", "Python"]

programming_languages[:] = (value for value in programming_languages if value != "Python")

print(programming_languages)

#output

#['JavaScript', 'Java', 'C++']

결론

완성했어요! 파이썬에서 remove() 메소드를 사용하여 리스트 항목을 삭제하는 방법을 알게 되었습니다. 또한 파이썬에서 리스트 안에 어떤 항목에 해당하는 모든 인스턴스를 제거하는 몇 가지 방법을 보았습니다.

이 글이 유용하면 좋겠네요.

파이썬 프로그래밍 언어에 대해 더 배우기 위해서는 freeCodeCamp의 Scientific Computing with Python Certification을 확인하세요.

기초부터 시작해서 상호작용하며 초급자 친화적인 방법으로 배우게 될 것입니다. 또한 마지막에는 실습에서 5개의 프로젝트를 완성하여 배운 것을 보충하게 될 것입니다.

읽어주셔서 감사하고 코딩 재밌게 하세요 😊!