HOWTO · Python
Python의 집합에서 요소 제거
Python에서 집합의 요소를 제거하는 방법은 여러 가지가 있습니다. remove()와 discard() 함수는 요소 하나를 제거하고, pop()은 임의의 요소를 제거하며, - 연산자와 difference(), difference_update()는 여러 요소를 한 번에 제거합니다.
이 페이지의 내용
이 튜토리얼에서는 Python에서 집합의 요소를 제거하는 다양한 방법을 다룹니다. 요소 하나를 제거하려면 remove(), discard(), pop()을 사용할 수 있고, 여러 요소를 한 번에 제거하려면 - 연산자, difference(), difference_update()를 사용할 수 있습니다.
remove() 함수로 단일 요소 제거하기
set.remove() 함수는 집합에서 특정 요소를 제거합니다. 제거할 요소를 인수로 받습니다. 요소가 있으면 제거되고, 없으면 remove()는 KeyError를 발생시킵니다. 다음 코드 예를 보세요.
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.remove(5)
print(set1)
출력:
{0, 1, 2, 3, 4, 6, 7, 8, 9}
위 코드에서 remove(5)로 요소 5를 set1에서 제거했습니다. 지정한 값이 집합에 없는 경우를 아래 예에서 보여줍니다.
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.remove(51)
print(set1)
출력:
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
KeyError: 51
값 51을 set1에서 제거하려고 했습니다. set1에 값 51이 없으므로 remove() 함수는 KeyError를 발생시킵니다.
discard() 함수로 단일 요소 제거하기
discard() 함수는 remove()와 매우 비슷합니다. 값이 있으면 지정한 요소를 집합에서 제거합니다. 유일한 차이점은 값이 집합에 없어도 discard()는 KeyError를 발생시키지 않고 집합을 그대로 둔다는 것입니다. 다음 코드 스니펫은 discard()로 집합에서 단일 요소를 제거하는 방법을 보여줍니다.
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.discard(5)
print(set1)
출력:
{0, 1, 2, 3, 4, 6, 7, 8, 9}
discard() 함수로 값 5를 set1에서 제거했습니다. 위에서 설명한 대로, set1에 없는 값을 전달해도 코드는 성공적으로 실행되고 예외가 발생하지 않으며, 다음 예가 이를 보여줍니다.
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set1.discard(51)
print(set1)
출력:
{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
discard() 함수로 51을 set1에서 제거하려고 했습니다. 지정한 값이 set1에 존재하지 않으므로 어떤 요소도 제거되지 않고 오류도 발생하지 않습니다. set1은 변경 없이 출력됩니다.
pop() 함수로 임의의 요소 제거하기
pop() 함수는 집합에서 임의의 요소를 제거하고 반환합니다. 어떤 요소가 제거되어도 상관없는 경우, 예를 들어 집합이 빌 때까지 요소를 하나씩 처리할 때 사용합니다.
set1 = {1, 2, 3, 4, 5}
removed = set1.pop()
print(removed)
print(set1)
출력:
1
{2, 3, 4, 5}
pop()은 1을 반환하고 set1에서 제거했습니다. 어떤 요소가 반환될지는 임의적이며, 언어가 특정 요소를 보장하지 않습니다. 따라서 pop()이 특정 값을 제거하는 것에 의존해서는 안 됩니다. remove()와 마찬가지로, 집합이 비어 있으면 pop()은 KeyError를 발생시킵니다.
- 연산자로 여러 요소 제거하기
- 연산자는 Python에서 집합의 차집합 연산을 수행합니다. 왼쪽 집합에서 오른쪽 집합의 모든 요소를 제거하고 결과를 새 집합 형태로 반환합니다. 오른쪽 집합의 요소 중 왼쪽 집합에 없는 것은 단순히 무시되며, 이 방식은 예외를 발생시키지 않습니다. 다음 코드 스니펫은 - 연산자로 여러 요소를 제거하는 방법을 보여줍니다.
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set2 = {2, 4, 6, 8, 0}
set1 = set1 - set2
print(set1)
출력:
{1, 3, 5, 7, 9}
- 연산자로 set2의 모든 요소를 set1에서 제거하고 결과 집합을 다시 set1에 할당했습니다. 다음 코드 예는 두 집합에 공통 요소가 없는 경우를 보여줍니다.
set1 = {1, 3, 5, 7, 9}
set2 = {2, 4, 6, 8, 0}
set1 = set1 - set2
print(set1)
출력:
{1, 3, 5, 7, 9}
오른쪽 집합의 어떤 요소도 왼쪽 집합에 없으므로 코드는 성공적으로 실행되고, - 연산자는 왼쪽 집합을 변경 없이 반환합니다.
difference() 함수로 여러 요소 제거하기
set.difference() 함수는 - 연산자와 같은 차집합 연산을 메서드 형태로 수행합니다. 제거할 요소를 가진 집합을 입력 매개변수로 받아, 그 요소를 모두 호출한 집합에서 제거하고 결과를 새 집합 형태로 반환합니다. 다음 코드 스니펫을 보세요.
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set2 = {2, 4, 6, 8, 0}
set1 = set1.difference(set2)
print(set1)
출력:
{1, 3, 5, 7, 9}
difference() 함수로 set2의 모든 요소를 set1에서 제거하고 결과를 set1에 저장했습니다. 입력 집합의 값이 호출한 집합에 없는 경우의 difference() 동작은 - 연산자와 같습니다. 아무것도 제거되지 않고 오류도 발생하지 않습니다.
difference_update() 함수로 여러 요소를 제자리에서 제거하기
앞의 두 방식은 새 집합을 반환하므로 결과를 어딘가에 저장해야 합니다. difference_update() 함수는 다르게 동작합니다. 호출한 집합을 제자리에서 업데이트하여 인수 집합의 요소를 모두 직접 제거합니다.
set1 = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}
set2 = {2, 4, 6, 8, 0}
set1.difference_update(set2)
print(set1)
출력:
{1, 3, 5, 7, 9}
difference_update() 함수로 set2의 모든 요소를 set1에서 제거했고, 이제 set1 자체가 결과 집합을 담고 있습니다. 앞의 두 방식과 달리 결과를 저장하기 위해 새 집합을 만들 필요가 없었습니다. difference_update() 함수는 Python의 -= 연산자와 동등합니다.
결론
단일 요소를 제거하려면, 요소가 반드시 있어야 하는 경우에는 remove()를(없는 요소는 KeyError를 발생시켜 실수를 일찍 드러냅니다), 요소가 없을 수도 있는 경우에는 discard()를 사용하세요. 어떤 요소든 상관없다면 pop()을 사용하세요. 여러 요소를 한 번에 제거하려면 새 집합을 얻기 위해 - 연산자나 difference()를, 집합을 제자리에서 업데이트하려면 difference_update()(동등한 -=)를 사용하세요.