파이썬 독학/입문 강의

[파이썬독학강의] 10. 파이썬 집합(Set) 자료형

데니 by danny 2023. 3. 24. 00:57
반응형

파이썬 집합(Set)

 

님들 안녕하세요. 14년 차 IT개발자 데니예요.  우리는 지금까지 파이썬 자료형인 숫자/문자열/리스트/튜플/딕셔너리/논리형을 배웠어요. 오늘은 자료형 마지막 시간으로 집합(Set)에 대해서 살펴보실 거예요.  우리는 집합이라는 용어에 매우 익숙해요. 학교 수학 시간에 집합의 개념/표현방법/연산에 대해서 이미 배웠고, 님들 대부분은 지금까지 그 내용을 기억하고 계실 거예요.  파이썬 집합(Set)은 수학 집합의 개념과 별반 다를 게 없으니 어렵지 않게 학습하실 수 있어요. 자 그럼 파이썬 집합(Set)에 대한 강의를 시작해 볼게요.

 

 

10. 파이썬 집합(Set) 자료형

  ▶ 집합(Set) 자료형이란?

수학에서 집합을 명확한 기준에 의하여 주어진 서로 다른 대상들이 모여 이루는 새로운 대상이라고 정의해요. 그리고 아래 다이어 그림처럼 도식화할 수 있어요. 

 

집합 다이어그램

 

1. 명확한 기준, 2. 서로 다른 대상. 3. 새로운 대상

위 3가지만 알고 계시면 파이썬 집합(Set)을 학습하시는데 모든 개념을 갖추신 거예요.

파이썬에서 집합(Set)은 위 3가지 속성에 부합하는 수학적 집합을 처리하기 위한 자료형이라 할 수 있어요.  그래서 파이썬 집합 자료형은 순차적이지 않고, 집합 내에 중복 값이 존재할 수 없어요. 참고로 파이썬은 2.3버전부터 집합 자료형을 제공하기 시작했어요. 실습을 통해서 파이썬 집합의 생성과 연산 방법을 익혀볼게요.

 

 

  ▶ 집합 자료형 생성

 

집합을 생성해 볼게요. set()을 사용해서 집합을 생성할 수 있어요.

set()의 괄호 안에 리스트를 넣어서 집합을 생성할 수 있어요. 집합은 딕셔너리와 같은 중괄호 {} 안에 요소 값이 있어요. 딕셔너리와 다른 점은 딕셔너리는 key:value쌍이 중괄호 안에 요소로 들어갔지만, 집합은 단일 값이 요소 값으로 괄호 안에 들어가 있어요. set() 괄호 안에 문자열을 넣어서도 집합을 생성할 수 있어요. set()을 사용하지 않고 중괄호 {}를 사용해서 직접 집합을 만들 수 있어요.

 

1
2
3
4
5
6
7
8
9
10
11
12
>>> s1 = set([123])
>>> s1
{123}
>>> s2 = set('Hello')
>>> s2
{'H''e''o''l'}
>>> s3 = {4, 5, 6}
>>> s3
{4, 5, 6}
>>> type(s3)
<class 'set'>
>>>

cs

라인[1]은 set()에 리스트를 넣어서 집합을 생성하여 s1 변수에 대입했어요.

라인[2]~[3]은 s1를 출력했어요. 집합은 딕셔너리에서 사용하는 중괄호를 사용하여 표현하며 요소 값으로 key:value쌍이 아닌 단일 값을 가져요.

라인[4]는 set()에 문자열을 넣어서 집합을 생성하여 s2변수에 대입했어요.

라인[5]~[6]은 s2를 출력했어요. 문자열 'Hello'를 집합으로 생성하니 중복되는 값이 제거되어 문자 'H', 'e', 'o', 'l'이 집합 요소로 생성되었어요. 집합에서는 중복 값이 존재할 수 없기 때문이에요.

라인[7]은 중괄호를 사용해서 직접 집합을 생성하여 s3변수에 대입했어요.

라인[8]~[9]는 s3변수를 출력했어요.

라인[10]~[11]은 s3변수의 자료형을 확인해 봤어요. s3변수의 자료형은 집합(set)임을 확인할 수 있어요.

 

  ▶ 집합을 리스트로 변환

 

집합은 list()를 사용해서 리스트 자료형으로 변환할 수 있어요.

 

1
2
3
4
5
6
7
>>> s4 = set([123)]
>>> l4 = list(s4)
>>> l4
[123]
>>> l4[0]
1
>>>
cs

라인[1]은 set()에 리스트를 넣어서 집합을 생성하고 s4변수에 대입했어요.

라인[2]는 집합 s4를 list()에 넣어서 집합을 리스트로 다시 변환하고 l4변수에 대입했어요.

라인[3]~[4]는 l4변수를 출력하니 리스트가 출력되었어요.

라인[5]~[6]는 리스트 자료형인 l4변수에 인덱싱을 했어요.  인덱싱 결과  l4[0]에 해당되는 요소 1이 정상적으로 출력되었어요.

 

 

  ▶ 집합을 튜플로 변환

 

집합은 tuple()을 사용해서 튜플 자료형으로 변환할 수 있어요.

 

1
2
3
4
5
6
7
>>> s5 = set([123])
>>> t5 = tuple(s4)
>>> t5
(123)
>>> t5[0]
1
>>>
cs
     

라인[1]은 set()에 리스트를 넣어서 집합을 생성하고 s5 변수에 대입했어요.

라인[2]는 tuple()에 집합 자료형 변수 s5를 넣어서 튜플로 변환하고 t5변수에 대입했어요.

라인[3]~[4]는 t5변수를 출력했어요. 튜플이 출력되었어요.

라인[5]~[6]은 튜플 자료형 변수 t5에 인덱싱을 했어요. t5[0]에 해당되는 요소 1이 정상적으로 출력되었어요.

 

 

  ▶ 합집합, 교집합, 차집합

 

수학에서 합집합은 모든 원소를 한 군데 합쳐놓은 집합을 의미해요. 즉, 그들 중 하나에라도 속하는 원소들을 모두 모은 집합이에요. 아래 그림처럼 도식화할 수 있어요.

출처 : https://ko.wikipedia.org/wiki/합집합
출처 : https://ko.wikipedia.org/wiki/합집합

파이썬 집합(set)에서 합집합 연산자를 통해서 수학에서 처럼 합집합을 할 수 있어요.

 

1
2
3
4
5
6
7
8
>>> s6 = set([12345]
>>> s7 = set([34567])
>>> s6 | s7
>>> {1234567}
>>>
>>> s6.union(s7)
>>> {1234567}
>>>
cs

라인[1]~[2]는 변수 s6과 s7에 각각 set()에 리스트를 넣어서 집합을 생성하고 대입했어요.

라인[3]~[4]은 합집합 연산자인 | 를 사용해서 s6과 s7의 합집합을 구해서 출력했어요.

라인[6]~[7]은 집합 내장 함수인 union을 사용해서 합집합을 구해서 출력했어요. 결과적으로 합집합은 | 연산자나 union() 내장 함수를 사용해서 구할 수 있어요.

 

 

교집합은 그 두 집합이 공통으로 포함하는 원소로 이루어진 집합을 의미해요. 아래 그림처럼 도식화할 수 있어요.

출처 : https://ko.wikipedia.org/wiki/교집합
출처 : https://ko.wikipedia.org/wiki/교집합

 

위 합집합 실습에서 사용한 집합 자료형 변수 s6와 s7를 사용해서 교집합 실습을 이어 진행해 볼게요.

 

1
2
3
4
5
6
>>> s6 & s7
>>> {345}
>>>
>>> s6.intersection(s7)
>>> {345}
>>>
cs

라인[1]~[2]는 & 연산자를 사용해서 교집합을 구해서 출력했어요.

라인[4]~[5]는 내장 함수인 intersection() 사용해서 s6와 s7의 교집합을 구하여 출력했어요. 결과적으로 교집합은 & 연산자나 intersection() 내장 함수를 사용해서 구할 수 있어요.

 

 

차집합은 상대 집합이 가지고 있는 요소를 제외한 요소를 모은 집합을 의미해요. 아래 그림처럼 도식화할 수 있어요.

출처 : https://ko.wikipedia.org/wiki/차집합
출처 : https://ko.wikipedia.org/wiki/차집합

 

위 합집합 실습에서 사용한 집합 자료형 변수 s6와 s7를 사용해서 차집합 실습을 이어 진행해 볼게요.

 

1
2
3
4
5
6
>>> s6 - s7
>>> {12}
>>>
>>> s6.difference(s7)
>>> {12}
>>>
cs

라인[1]~[2]은 차집합 연산자 - 를 사용해서 차집합을 구하여 출력했어요.

라인[4]~[5]는 내장 함수인 difference()를 사용해서 차집합을 구하고 출력했어요. 결과적으로 차집합은 - 연산자나 difference() 내장 함수를 사용해서 구할 수 있어요.

 

  ▶ 집합(Set) 내장함수

add() 내장 함수 - 집합 요소 값을 추가할 수 있어요.

 

1
2
3
4
>>> s8 = set([123])
>>> s8.add(4)
>>> s8
>>> {1234}
cs

라인[1]은 set()에 리스트를 넣어 집합을 생성하고 s8 변수에 대입했어요.

라인[2]~[4]는 내장 함수 add()를 사용해서 집합에 요소 4를 추가했어요.

 

update() 내장 함수 - 여러 개 값을 추가할 수 있어요.

 

1
2
3
4
>>> s8.update([567])
>>> s8
>>> {1234567}
>>>
cs

라인[1]~[3]은 내장 함수 update에 리스트 [5, 6, 7]를 넣어서 집합 자료형 s8 변수에 여러 개의 요소 값을 추가했어요.

 

remove() 내장 함수 - 집합 내에 특정 값을 제거할 수 있어요.

 

1
2
3
4
5
>>> s9 = set([123])
>>> s9.remove(2)
>>> s9
{13}
>>>
cs

라인[1]은 set()에 리스트를 넣어서 집합을 생성하고 s9 변수에 대입했어요.

라인[2]는 remove() 내장 함수에 숫자 2를 넣어서 집합 내에 숫자 2 값을 제거했어요.

라인[3]~[4]는 s9을 출력했어요. 숫자 2가 제거된 집합이 출력되었어요.

 

 

님들 오늘은 파이썬 마지막 자료형인 집합(Set)에 대해서 학습해 보았어요. 집합은 님들께서 이미 알고 계시고 익숙한 개념이시라서 쉽게 접근하셨을 거라 생각해요. 그래도 어려우셨거나 기타 문의 사항 있으시면 dannyeducation1@gmail.com으로 메일 남겨주세요. 오늘도 너무 고생하셨어요. 푹 쉬시고 다음 시간에 뵐게요.

반응형