[포스코 신재생에너지 IoT 개발자 5기] Python 6편 — 셋(set)

Doohee·2025년 11월 23일
post-thumbnail

파이썬의 Set(집합)은 중복을 자동 제거하고, 순서가 없는(unordered) 자료형으로 수학적 집합 구조를 그대로 구현한다.

중복 제거, 빠른 탐색, 교차 분석, 권한/그룹 비교 등에서 특히 강력하다.

또한 해시 기반 구조라 membership 검사 성능이 list보다 평균적으로 훨씬 빠르기 때문에 대규모 데이터에서도 유리하다.

이 문서는 Set의 정의 → 특징 → 생성 → 메서드 → 집합 연산 → 실무 활용 → 실습 → 요약까지 기술문서 형식으로 종합 정리한다.

1. Set(집합)의 기본

1) 집합(set)?

  • 파이썬의 중복 없는(unique) 데이터 집합

  • 순서 없음(unordered) - 인덱싱 / 슬라이싱 불가

  • Set 자체는 mutable(요소 추가·삭제 가능), 하지만 저장되는 요소는 immutable이어야 한다.

  • 수학의 집합 연산(합집합·교집합·차집합 등) 지원

  • 해시 기반 구조 ⇒ 탐색 속도 매우 빠름

set"고유 값의 집합"을 정의할 때 사용하기 적합하며, 중복 제거와 빠른 비교가 필요한 상황에서 성능이 뛰어나다.

2) 집합(set)의 특징

  • 중복된 값을 자동으로 제거

  • 순서를 보장하지 않아 출력 순서가 달라질 수 있다(환경·해시 상태에 따라 변동)

  • 인덱싱이 불가 ⇒ 필요시 list 반환

  • 요소는 반드시 immutable(int, float, str, tuple 등)

  • for 문으로 순회 가능

set_1

set_3

중복이 자동 제거되는 Set의 기본 동작 예시, Set순서를 보장하지 않기 때문에 출력 결과의 순서가 매번 달라질 수 있음

2. Set 생성 문법

1) 중괄호({})를 사용한 직접 선언

  • 중괄호 {} 안에 값을 나열하면 바로 집합 생성됨

  • 중복된 값은 자동으로 제거됨

set_4

2) set() 생성자 함수 사용

  • 리스트, 튜플, 문자열 등을 set()에 전달하여 집합 생성

  • 전달된 값들 중 중복은 자동 제거됨

set_5

3) 빈 집합 생성 주의!!

  • 빈 중괄호 {}딕셔너리(dict)로 인식됨

  • 따라서 빈 집합은 반드시 set()으로 생성해야 함

set_6

✔ 주의: {}는 빈 딕셔너리이며, 빈 Set은 set()으로 생성해야 한다

4) 순서 없음

  • set은 순서가 없는 컬렉션이라 인덱싱/슬라이싱 불가

  • 순서가 필요하면 리스트(list)로 변환하여 사용

set_7

5) 반복문 순회 가능

  • 순서가 없어도 for문 등으로 순회는 가능함

  • 단, 출력 순서는 매번 달라질 수 있음 (해시 기반 저장)

set_8

6) 자료형 제한

  • set의 원소는 반드시 immutable(변경 불가) 자료형이어야 함

  • 리스트, 딕셔너리 같은 mutable 자료형은 원소가 될 수 없음

set_9

set의 요소는 immutable 자료형만 가능하며, list, dict는 요소로 사용할 수 없다.

3. Set 주요 연산 및 메서드

1) 집합 연산

  • set은 수학적 집합 개념을 그대로 사용할 수 있도록 연산자를 지원함

set_2

합집합 / 교집합 / 차집합 / 대칭 차집합의 시각적 이해를 돕는 이미지

set_10

합집합 / 교집합 / 차집합 / 대칭 차집합 에 대한 메서드 설명

set_11

✔ 메서드를 사용한 집합 연산 예시

2) 집합 메서드

set_12

여러 집합 메서드에 대한 설명

set_13

Set주요 수정 메서드(add, remove, discard 등) 동작 예시

3) 부분 집합 관련 메서드

set_14

부분집합 / 상위집합 / 서로소 관계를 나타내는 집합 구조

set_15

Set부분집합 메서드 동작 예시

4. Set 활용 - 실무에서 자주 쓰는 이유

set은 중복 제거·빠른 탐색·집합 연산 이라는 고유 특성 덕분에 실무에서 널리 쓰인다.

  • 리스트에서 중복 제거: set(list)

  • 두 집합의 공통 요소 분석(교집합 기반 교차 분석)

  • 조건 일치 여부 빠른 검사: x in set

  • 로그 / 기록 데이터에서 중복 탐지

  • 권한 그룹, 태그, 관심사 분석 등 집합 개념이 필요한 구조

  • 특히 membership check(x in set)속도는 list보다 수십 배 빠르다.

실습. set 종합 연습

문제1. 중복 제거 및 개수 세기

  • 어떤 학급의 학생들이 제출한 팀 과제 파일 이름 목록이 아래와 같습니다. 중복 제출된 경우도 포함되어 있습니다.

  • 중복을 제거한 후, 제출한 학생 수를 출력하는 프로그램을 작성하세요

  • submissions = ["Kim", "Lee", "Kim", "Park", "Choi", "Lee", "Lee"]

set_16

✔ 출력 결과

제출한 학생 수: 4명
제출자 명단: {'Kim', 'Lee', 'Choi', 'Park'}

문제2. 공통 관심사 찾기

  • 두 명의 사용자가 각자 좋아하는 영화 장르를 아래와 같이 입력했습니다.

  • 두 사용자의 공통 관심 장르, 서로 다른 장르, 모든 장르 목록을 출력하세요.

  • user1 = {"SF", "Action", "Drama"}

  • user2 = {"Drama", "Romance", "Action"}

set_17

✔ 출력 결과

공통 관심 장르: {'Drama', 'Action'}
서로 다른 장르: {'SF', 'Romance'}
전체 장르: {'Action', 'SF', 'Drama', 'Romance'}

문제3. 부분집합 관계 판단

  • 어떤 유저가 가지고 있는 자격증 목록과 특정 직무에 필요한 자격증 목록이 주어집니다.

  • 이 사용자가 지원 자격을 갖추었는지 확인하세요.

  • my_certificates = {"SQL", "PYTHON", "LINUX"}

  • job_required = {"SQL", "PYTHON"}

set_18

✔ 출력 결과

지원 자격 충족 여부: True

5. set 한눈에 정리

Set은 “중복 제거 + 빠른 탐색 + 집합 연산”에 최적화된 파이썬의 해시 기반 자료형이다.

  • 중복 자동 제거: 고유한(unique) 값만 저장

  • 순서 없음(Unordered): 인덱싱·슬라이싱 불가

  • 가변(Mutable): 요소 추가·삭제 가능

  • 빠른 탐색: membership 검사(x in set) 속도가 list 대비 압도적으로 빠름

  • 집합 연산 지원: 합집합(|), 교집합(&), 차집합(-), 대칭 차집합(^)

  • 요소 제한: 요소는 반드시 immutable 자료형만 가능

  • 생성 방식: {} 또는 set() / 빈 set은 반드시 set()

  • 활용 분야: 중복 제거, 로그/기록 데이터 처리, 권한/그룹 비교, 교차 분석 등

  • 리스트 중복 제거 시 가장 빠르고 간단한 방식: set(list)

  • 주요 메서드:

    • 요소 조작 → add, remove, discard, pop, clear, update

    • 집합 비교 → issubset, issuperset, isdisjoint

➡ 결론: Set은 “고유 값 관리”와 “비교·탐색 최적화”가 필요한 모든 상황에서 리스트보다 훨씬 단순하고 빠르게 문제를 해결해주는 핵심 자료형이다.

6. 아웃트로

Set은 파이썬에서 가장 직관적이면서도 강력한 자료형 중 하나이다.

복잡한 데이터에서도 중복 제거, 빠른 탐색, 비교 연산을 통해 효율적인 데이터 처리와 분석이 가능하게 한다.

특히 데이터 분석·로그 처리·권한 관리·여러 그룹 비교와 같은 상황에서

Set은 리스트나 튜플로는 구현하기 복잡한 기능을 단순하게 해결해주는 핵심 도구다.

집합의 개념을 이해하면 이후 딕셔너리, 조건문, 반복문, 알고리즘 문제에서도 큰 도움이 된다.

profile
에너지 기획 전문가로 성장하고자 합니다.

0개의 댓글