Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 세트 연산자와 메소드의 차이점 완벽 정리

파이썬의 set 객체는 내장 set 클래스의 인스턴스입니다. 합집합(union), 교집합(intersection), 차집합(difference), 대칭차집합(symmetric difference)과 같은 다양한 집합 연산은 해당 메소드를 호출하거나 연산자를 사용하는 두 가지 방식으로 수행할 수 있습니다.

메소드로 합집합 구하기

union() 메소드는 두 세트의 모든 원소를 포함하는 새로운 세트를 반환합니다.

>>> s1={1,2,3,4,5}
>>> s2={4,5,6,7,8}
>>> s1.union(s2)
{1, 2, 3, 4, 5, 6, 7, 8}
>>> s2.union(s1)
{1, 2, 3, 4, 5, 6, 7, 8}

합집합은 교환 법칙이 성립하므로 호출 순서에 관계없이 동일한 결과를 얻습니다.

| 연산자로 합집합 구하기

>>> s1={1,2,3,4,5}
>>> s2={4,5,6,7,8}
>>> s1|s2
{1, 2, 3, 4, 5, 6, 7, 8}

메소드로 교집합 구하기

intersection() 메소드는 두 세트에 공통으로 존재하는 원소만 담은 새로운 세트를 반환합니다.

>>> s1={1,2,3,4,5}
>>> s2={4,5,6,7,8}
>>> s1.intersection(s2)
{4, 5}
>>> s2.intersection(s1)
{4, 5}

& 연산자로 교집합 구하기

>>> s1={1,2,3,4,5}
>>> s2={4,5,6,7,8}
>>> s1&s2
{4, 5}
>>> s2&s1
{4, 5}

메소드로 차집합 구하기

difference() 메소드는 첫 번째 세트에는 있지만 두 번째 세트에는 없는 원소들로 이루어진 새로운 세트를 반환합니다.

>>> s1={1,2,3,4,5}
>>> s2={4,5,6,7,8}
>>> s1.difference(s2)
{1, 2, 3}
>>> s2.difference(s1)
{8, 6, 7}

차집합은 교환 법칙이 성립하지 않으므로 피연산자의 순서에 따라 결과가 달라진다는 점에 유의해야 합니다.

- 연산자로 차집합 구하기

>>> s1={1,2,3,4,5}
>>> s2={4,5,6,7,8}
>>> s1-s2
{1, 2, 3}
>>> s2-s1
{8, 6, 7}

연산자와 메소드의 핵심 차이점

두 방식의 가장 중요한 차이는 인자로 받을 수 있는 자료형입니다.

  • 메소드: 리스트, 튜플 등 임의의 이터러블(iterable) 객체를 인자로 받을 수 있습니다.
  • 연산자: 피연산자 양쪽 모두 반드시 set 객체여야 하며, 그렇지 않으면 TypeError가 발생합니다.
>>> s1={1,2,3,4,5}
>>> s1.union([6,7,8])   # 리스트도 인자로 사용 가능
{1, 2, 3, 4, 5, 6, 7, 8}
>>> s1 | [6,7,8]        # set이 아니면 오류 발생
TypeError: unsupported operand type(s) for |: 'set' and 'list'

또한 두 방식 모두 원본 세트를 변경하지 않고 새로운 세트를 반환한다는 점에서 동일하게 동작합니다. 만약 원본 세트를 직접 수정하고 싶다면 update(), intersection_update(), difference_update() 메소드나 |=, &=, -= 복합 할당 연산자를 사용하면 됩니다.