본문 바로가기

Python/데이터 구조

데이터 구조 4. Set(집합)의 이해 및 활용 방법

반응형

1. Set(집합)의 개념

 

2. Set(집합)의 종류 및 구현 방법

 

 

 

 

1. Set(집합)의 개념

 

보통 초등학교 고학년 내지 중학교 저학년 수학다운 수학을 배울 때 처음으로 접하는게 바로 집합이죠. 집합의 개념은 코딩하고 데이터를 관리할 때도 굉장히 중요하게 작용하는 개념이니 반드시 배우면 좋습니다. 

 

우선 파이썬에서는 집합을 Set()이라고 부르고, 데이터를 관리합니다. 이에 대해 바로 어떠한 집합 함수들이 있는 바로 알아보도록 하겠습니다. 

 

(1) 집합의 기본 문법

 1) 파이썬에서 Set 활용의 기본 

 : 파이썬에서는 set() 혹은 { }를 활용하여 Set 데이터 구조를 활용할 수 있습니다. 아래의 사진을 보시죠

 

Set의 구현

알파벳 a,b 그리고 c를 하나의 집합에 넣은 것을 보실 수 있습니다. 간단한 집합을 만들었지만, 조금 더 복잡한 집합들을 만들 수 있습니다. 

 

예를 들어, 다양한 찌개 레시피를 알고 있는데, 거기에 겹치는 식재료 혹은 음식만의 독특한 식재료를 알고 싶다고 해봅다. 그러면 집합의 개념으로 표현할 수 있겠죠? (자료 출처: 코딩하는 공대생)

 

1
2
3
4
5
6
찌개 = {
        '된장 찌개' : { '두부''된장''양파''청양고추''다시마''멸치'},
        '김치 찌개' : { '김치''돼지고기''양파''청양고추''간장''다진마늘'},
        '순두부 찌개' : { '다진마늘''고추가루''순두부''다시마''멸치''국간장''청양고추'},
        '미역국' : { '국간장''다진마늘''미역''참기름''멸치액젓''소고기' }
cs

 

집합 구조는 큰 집합 안에 여러 작은 집합을 만들 수 있는게 특징입니다. 여기서 각각의 식재료에 대한 것을 알아보고 싶으면 대집합_이름['하위_집합이름'] 으로 조회할 수 있습니다. 

 

Set의 기본적인 자료 활용 방법

 

2) Set(집합)의 특징

다른 배열/리스트, 큐, 스택 등과 다르게 Set은 한 가지 특징이 있습니다. 바로 중복을 허용하지 않습니다. 왜냐하면 굳이 중복을 허용할 필요가 없는 것이 집합의 개념이기 때문이죠.

 

또 한 가지 특징은 데이터 셋 안에서 순서가 없거나 큰 의미가 없습니다. 집합은 어떠한 원소를 포함하냐 안 하하냐 중요한 자료 구조 및 수학적 개념이지 굳이 거기 안에서 더 깊게 파고 들 필요가 없습니다. 

 

이러한 집합의 개념은 데이터를 검증하거나, 데이터 셋 간 비교를 할 때 굉장히 유용하게 사용되니 잘 기억해주시기 바랍니다. 

 

 

이제 본격적인 데이터셋을 알고 있으니, 이것을 실전처럼 활용하는 방법을 알아보도록 하겠습니다. 

 

2. 집합의 종류 및 구현 방법

 

(1) 교집합의 연산자: &, intersection()

교집합의 개념은 다들 아시리라 믿고 아래의 사진으로 개념적이 부분을 보여드린 뒤에 바로 넘어가겠습니다.

(참고: 그림의 출처는 수학방 블로그입니다.)

 

교집합의 개념. 출처: 수학방

 

 

파이썬에서 교집합을 계산하는 방법은 두 가지가 있습니다. 바로 & 혹은 set(a).intersection(set(b)) 이런식으로 활용하는 것입니다. 그럼 실습으로 들어가서 김치찌개와 된장찌개에서 공유되는 식재료를 알아보겠습니다.

 

Intersection Set 활용 방법

네 공통적으로 사용되는 식재료는 양파와 청양고추인 것을 볼 수가 있네요. 

 

 

 

(2) 합집합의 연산자: | , union()

 

합집합의 개념 또한 쉬우니 위와 같이 사진으로 설명하고 넘어가도록 하겠습니다. 

 

합집합의 수학적 개념. 출처: 수학방

 

합집합을 표현할 수 있는 연산식은 두 가지가 있습니다. 첫 번째는 | 연사자이고 두 번째는 set(a).union(set(b))입니다. 이를 통해 미역국과 순두부찌개에 사용되는 모든 식재료를 알아보겠습니다. 

 

Union set 합집합의 활용

네 두 요리를 모두 하려면 생각보다 많은 식재료가 많은 것을 알아볼 수가 있네요.

 

 

(3) 차집합: - ,  difference()

 

차집합의 개념도 굉장히 단순하죠. 그림으로 보시고 넘어가겠습니다.

 

차집합의 개념. 출처: 수학방

 

 

파이썬에서 차집합을 나타내는 연산자는 두 가지가 있습니다. 하나는 set(a) - set(b)이고 다른 하나는 set(a).difference(set(b))입니다. 예제로 순두부찌개에만 들어가고 김치찌개에는 안 들어가는 재료를 찾아보도록 하겠습니다. 

 

 

Set Difference 차집합의 구현

 

뭐 식재료는 예시일 뿐 너무 깊게 들어가지 마셔요. 저도 김치찌개할 때는 원래 고추가루나 국간장 애용하고 있습니다 ㅋㅋ 

 

 

(4) 대칭 차집합: ^ , .symmetric_difference()

 

대칭 차집합은 개념을 조금 설명하고 넘어가겠습니다. 정의는 집합 A와 집합B가 공통적으로 갖고 있는 요소를 제외한 부분들의 총합을 말합니다. 아래의 사진을 보면 이해가 빠르게 되실 것 같습니다. 

 

대칭 차집합의 개념

 

파이썬에서 대칭 차집합을 활용하는 방법은 두 가지가 있습니다. 첫 번째는 ^ 연산자와 .symmetric_difference()입니다. 그러면 미역국과 된장찌개의 대칭 차집합을 구해보도록 하겠습니다. 

 

 

Symmetric Difference 대칭 차집합의 구현

 

 

 네 여기까지 어떻게 하면 Python에서 Set을 활용할 수 있는지 알아봤습니다. 

 

항상 정독하시 마시고, 필요한 것만 읽고 빠르게 넘어가서 시간과 노력을 아껴봐요 여러분 ㅋㅋ

반응형