말랑말랑제리스타일

파이썬 Set 정의 데이터 추가 및 삭제 방법 본문

프로그래밍/파이썬

파이썬 Set 정의 데이터 추가 및 삭제 방법

제리제리 2025. 3. 6. 10:38

파이썬의 자료형인 Set을 정의하고 데이터 추가 및 삭제를 비롯해 Set의 여러 메서드 정리

파이썬 Set 특징

파이썬에서 Set의 특징을 보려면 List와 비교하는 쪽이 가장 이해가 편합니다

먼저 List는 데이터의 순서가 있고 들어가는 순서대로 저장이 됩니다

대신 Set은 순서랄 게 없기 때문에 index를 통한 접근이 불가하며, 데이터가 들어갈 때 자동으로 정렬을 해주고 중복된 데이터를 제외해 줍니다

파이썬에서 Set 정의

파이썬에서 Set 정의하는 방법은 2가지가 있습니다

set_a = {1,2,3,4}
set_b = set()

초기 데이터가 있는 Set은 set_a와 같이 중괄호로 묶고 데이터를 넣어줍니다.

그러나 초기 데이터가 없는 Set의 중괄호를 비우는 경우 dictionary 타입이 되기 때문에 set_b와 같이 비어있는 Set을 만들어서 사용해야 합니다

파이썬 Set에 데이터 추가

파이썬 Set에 데이터 추가할 때는 add 메서드를 사용합니다

    set_a.add(5)
    set_a.add(3)
    set_b.add(3)
    set_b.add('hello')

하지만 앞서 말한 듯 파이썬 Set에는 중복을 불허하기 때문에 동일한 데이터를 넣으면 들어가지 않게 되며, List 자료형과 마찬가지로 서로 다른 타입의 데이터를 넣을 수는 있습니다

파이썬 Set에서 데이터 삭제

앞서 말했듯 파이썬의 Set은 인덱스로 접근이 불가능하기 때문에 데이터 자체를 파라미터로 넣고 remove 메서드를 호출해야 합니다

    set_b.remove(3)
    set_b.remove('hello')

이렇게 remove 메서드로 Set에서 데이터 삭제가 가능하다는 거죠

문제는 remove 메서드로 삭제 시 해당 데이터가 없으면 Key 에러를 뱉어냅니다

이 상황을 방지하기 위해 discard라는 메서드를 사용할 수 있는데요

set_b.discard(3)

이렇게 사용해 주면 set_b에 3이라는 데이터가 없는 경우 에러를 뱉지 않고 그냥 넘어가 줍니다

파이썬 Set의 데이터 접근

파이썬 Set에서 인덱스를 통한 데이터 접근은 불가능하죠

따라서 Set에 있는 데이터에 인덱스로 접근하기 위해서는 List로 변환해야 합니다

    list_a = list(set_a)
    print(list_a)
    print(list_a[0])

다시 말해 Set에 데이터에 직접 접근하는 건 불가능하다고 이해하면 됩니다

파이썬 Set의 주요 사용처

그럼 접근도 할 수 없는 데이터 타입을 어떨 때 쓰냐고 생각할 수 있죠

저 같은 경우 어떤 데이터가 Set에 포함되어 있는지 확인하기 위한 용도로 주로 사용합니다.

    list_a = [1,2,3,4,5,6,7,8]
    for i in list_a:
        if i in set_a:
            print(i)

이런 형태로 리스트나 어떤 열거 타입의 데이터가 Set에 있는지 확인해서 액션을 취하는 거죠

그 외에도 List를 Set으로 바꿔서 중복 제거용으로 쓰기도 합니다

파이썬 Set의 주요 기능

파이썬 Set은 말 그대로 집합이기 때문에 다양한 집합 함수를 포함하고 있습니다

    set_a = {1,2,3,4}
    set_b = {3,4,5,6}
    
    print(set_a & set_b) #교집합
    print(set_a | set_b) #합집합
    print(set_a - set_b) #차집합
    print(set_b - set_a) #차집합
    print(set_a ^ set_b) #대칭차집합

결과를 보면 아래와 같습니다

{3, 4}
{1, 2, 3, 4, 5, 6}
{1, 2}
{5, 6}
{1, 2, 5, 6}

즉, 이런 형태의 집합 연산이 가능하다는 거죠

set_a.update(set_b)


편리한 기능으로는 update 메서드로 바로 합집합 시킨 Set을 업데이트하는 기능도 있습니다.

유사한 기능으로 difference_update 메서드도 존재하죠

그 외에도 몇 가지 메서드가 더 있긴 한데요.

이 정도면 Set을 사용할 수 있을 정도가 되니 이쯤에서 마칩니다

정리하면 Set은 주로 데이터들을 모아놓고 in 구문을 이용해 데이터가 Set에 존재하는지 확인할 때 주로 쓰는 자료형이다 생각하면 되겠습니다

Comments