티스토리 뷰
필자가 고등학생이던 시절, 누구나 한 권씩 가지고 있는 유명한 수학 책이 있었는데 첫 단원이 '집합'이었습니다. 중학교 겨울방학때 미리 예습을 한답시고 공부를 하였는데 그 누가 그랬던가요. 작심삼일이라고... 두 주먹 불끈 쥐고 으쌰으쌰 도전했는데, 딱 집합까지였습니다. 스스로 다음 단원으로 진도를 나가는 게 참 쉽지가 않더군요.
(후에 학교를 와 보니 다른 친구들도 모두 집합 부분만 새카맣게 연필 자국이...)
이번에 배워볼 자료구조는 세트(set, 집합)입니다. 세트는 중복을 허용하지 않으며 또한 데이터의 순서도 보장하지 않습니다. 수학에서 배우는 것과 동일하게 중괄호를 이용하여 선언할 수 있습니다.
{value1, value2, ...} |
중복을 허용하지 않으므로 같은 값은 여러 번 적어도 딱 한 번만 들어가게 됩니다.
my_set = {1, 2, 3, 3, 3} # 중복을 허용하지 않으므로 3은 1번만 들어감
print(my_set) # {1, 2, 3}
정수, 문자열 등 다양한 형태의 값을 선언할 수 있으며, 중괄호 대신 set() 를 이용하는 방법도 있습니다. 어떤 회사의 개발팀 내에 자바와 파이썬을 할 줄 아는 사람들의 집합을 각각 정의해보겠습니다.
java = {"유재석", "김태호", "양세형"} # 자바 개발자 집합
python = set(["유재석", "박명수"]) # 파이썬 개발자 집합
집합의 성질을 이용하여 두 집합 중 공통되는 값들만 뽑아내는 교집합은 & 기호나 intersection() 을 이용하면 됩니다. 교집합을 이용하여 자바와 파이썬을 모두 다룰 줄 아는 개발자를 확인해볼까요?
# 교집합 (java 와 python 을 모두 할 수 있는 개발자)
print(java & python) # {'유재석'}
print(java.intersection(python)) # {'유재석'}
두 집합을 합치는 합집합은 키보드의 백스페이스 근처에 있는 | 기호나 union() 을 이용하면 됩니다. 자바 또는 파이썬 중 하나라도 다룰 줄 아는 개발자를 출력해보겠습니다. 이 때 두 집합에 공통으로 있는 값(예제에서는 유재석씨) 은 중복을 허용하지 않으므로 1번만 출력됩니다.
# 합집합 (java 또는 python 을 할 수 있는 개발자)
print(java | python) # {'박명수', '유재석', '김태호', '양세형'}
print(java.union(python)) # {'박명수', '유재석', '김태호', '양세형'}
잠깐! 집합은 순서를 보장하지 않으므로 집합 내 데이터들의 출력 순서는 다음과 같이 실행할 때마다 달라질 수 있어요. (예) {'박명수', '유재석', '김태호', '양세형'} {'양세형', '박명수', '유재석', '김태호'} ... |
새로운 프로젝트를 대비하여 개발팀 인력들을 대상으로 파이썬 교육이 필요하다고 합니다. 파이썬을 이미 할 줄 아는 분들은 또 배울 필요는 없을테니, 자바만 할 줄 아는 인력들만 확인해보겠습니다. 이 때는 차집합을 이용할 수 있는데, 파이썬에서는 - 기호 또는 difference() 를 이용하면 됩니다.
# 차집합 (java 는 할 수 있지만 python 은 할 줄 모르는 개발자)
print(java - python) # {'양세형', '김태호'}
print(java.difference(python)) # {'양세형', '김태호'}
파이썬 교육을 마친 후에 시험을 봤는데 아쉽게도 양세형씨는 탈락하고 김태호씨는 합격을 했다고 가정하겠습니다. 그러면 김태호씨는 파이썬 개발 프로젝트에 참여를 할 수 있기 때문에 다음과 같이 add() 를 이용하여 파이썬 개발자 집합에 추가를 해주겠습니다.
# python 개발자 추가 (기존 개발자 : 박명수, 유재석)
python.add("김태호")
print(python) # {'박명수', '유재석', '김태호'}
저런, 김태호씨가 파이썬 공부를 너무 열심히 한 탓인지 원래 할 줄 알던 자바를 잊었다고 합니다. 아쉽지만 remove() 를 이용하여 자바 개발자 집합에서 제외를 해야겠네요.
# java 개발자 삭제 (기존 개발자 : 유재석, 김태호, 양세형)
java.remove("김태호")
print(java) # {'유재석', '양세형'}
집합의 성질만 잘 이해하고 있다면 크게 어렵지 않게 자료구조를 활용할 수 있습니다.
'파이썬 강의 > 기본편' 카테고리의 다른 글
[파이썬 기본편] 5-6.퀴즈 #4 (16) | 2021.02.14 |
---|---|
[파이썬 기본편] 5-5.자료구조의 변경 (0) | 2021.02.13 |
[파이썬 기본편] 5-3.튜플 (1) | 2021.02.11 |
[파이썬 기본편] 5-2.사전 (0) | 2021.02.10 |
[파이썬 기본편] 5-1.리스트 (0) | 2021.02.09 |
- Total
- Today
- Yesterday
- Visual Studio Code
- 코랩
- 행맨
- 환경설정
- repl.it
- onlineclass
- c언어
- 파이게임
- Unity
- Xcode
- Colab
- ChatGPT
- vscode
- coloso
- game
- Coding
- Mac
- 주피터노트북
- pycharm
- GUI
- pygame
- 비주얼 스튜디오 코드
- 아나콘다
- 나도코딩
- 챗GPT
- 파이썬
- Tkinter
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |