산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> python

Python 집합(Set) 마스터하기: 생성, 조작, 연산

Python 집합(Set)

Python의 집합 자료형이 데이터 중복 제거와 집합 연산을 어떻게 단순화하는지 알아봅니다. 생성, 수정, 삭제, 필수 집합 연산까지 모두 다룹니다.

동영상: Python 집합

집합은 고유하고 불변(immutable)한 항목들의 순서 없는 컬렉션입니다. 집합 자체는 가변(mutable)하여 요소를 추가/제거할 수 있지만, 개별 요소는 해시 가능해야 합니다(숫자, 문자열, 튜플 등).

Python 집합은 합집합, 교집합, 차집합, 대칭 차집합 같은 수학적 집합 연산을 지원해 데이터 중복 제거, 멤버십 테스트, 집합 대수 등에 이상적입니다.


Python 집합 생성하기

중괄호 {}나 내장 set() 생성자로 집합을 만듭니다. 요소는 모든 불변 타입 가능하지만, 리스트, 딕셔너리, 다른 집합 같은 가변 타입은 포함할 수 없습니다.

# 예제 1: 다양한 데이터 타입의 집합
# 정수 집합
my_set = {1, 2, 3}
print(my_set)
# 혼합 데이터 타입 집합
my_set = {1.0, 'Hello', (1, 2, 3)}
print(my_tuple)

출력

{1, 2, 3} {1.0, (1, 2, 3), 'Hello'}

중복 값이 자동 제거되고, 불변인 튜플은 허용됨을 확인할 수 있습니다.

# 중복 제거
my_set = {1, 2, 3, 4, 3, 2}
print(my_set)
# 리스트에서 집합 생성
my_set = set([1, 2, 3, 2])
print(my_set)
# 가변 항목 포함 시 에러
# my_set = {1, 2, [3, 4]}  # TypeError: unhashable type: 'list'

출력

{1, 2, 3, 4} {1, 2, 3} Traceback (most recent call last): File "<string>", line 15, in <module> my_set = {1, 2, [3, 4]} TypeError: unhashable type: 'list'

빈 집합 생성에는 set() 생성자 필요; {}는 빈 딕셔너리를 만듭니다.

# 빈 구조 생성 시 집합과 딕셔너리 구분
a = {}
print(type(a))
a = set()
print(type(a))

출력

<class 'dict'> <class 'set'>

Python에서 집합 수정하기

집합은 가변이지만 순서가 없어 인덱싱이나 슬라이싱을 지원하지 않습니다.

add()로 단일 요소 추가, update()로 다른 이터러블 병합. 중복 항목은 자동 무시.

# 예제: 요소 추가
my_set = {1, 3}
print(my_set)
# 집합 인덱싱 시도 시 에러
# my_set[0]  # TypeError: 'set' object does not support indexing
# 단일 요소 추가
my_set.add(2)
print(my_set)
# 리스트에서 여러 요소 추가
my_set.update([2, 3, 4])
print(my_set)
# 리스트와 다른 집합 결합
my_set.update([4, 5], {1, 6, 8})
print(my_set)

출력

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

집합에서 요소 제거하기

discard()는 요소가 있으면 제거, 없으면 아무 동작 안 함. 반면 remove()는 요소가 없으면 KeyError 발생.

# 예제: discard vs remove
my_set = {1, 3, 4, 5, 6}
print(my_set)
my_set.discard(4)
print(my_set)
my_set.remove(6)
print(my_set)
my_set.discard(2)
print(my_set)
# 다음은 KeyError 발생
# my_set.remove(2)

출력

{1, 3, 4, 5, 6} {1, 3, 5, 6} {1, 3, 5} {1, 3, 5} Traceback (most recent call last): File "<string>", line 28, in <module> KeyError: 2

pop()은 임의 요소를 제거하고 반환, clear()는 집합을 완전히 비웁니다.

# pop과 clear 예제
my_set = set("HelloWorld")
print(my_set)
print(my_set.pop())
print(my_set)
my_set.clear()
print(my_set)

출력

{'H', 'l', 'r', 'W', 'o', 'd', 'e'} H {'r', 'W', 'o', 'd', 'e'} set()

Python 집합 연산

Python 집합은 합집합, 교집합, 차집합, 대칭 차집합 같은 고전적 집합 대수를 지원합니다. 연산자나 전용 메서드로 호출 가능.

두 예제 집합 사용:

A = {1, 2, 3, 4, 5}
B = {4, 5, 6, 7, 8}

합집합

Python 집합(Set) 마스터하기: 생성, 조작, 연산

A와 B의 합집합은 모든 고유 요소를 결합.

print(A | B)

출력

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

교집합

Python 집합(Set) 마스터하기: 생성, 조작, 연산

교집합은 두 집합에 공통인 요소만 반환.

print(A & B)

출력

{4, 5}

차집합

Python 집합(Set) 마스터하기: 생성, 조작, 연산

차집합 A - B는 A에 있고 B에 없는 요소들.

print(A - B)

출력

{1, 2, 3}

대칭 차집합

Python 집합(Set) 마스터하기: 생성, 조작, 연산

대칭 차집합 A ^ B는 두 집합 중 하나에만 속하는 요소들(공통 제외).

print(A ^ B)

출력

{1, 2, 3, 6, 7, 8}

추가 집합 메서드

집합 객체에서 사용 가능한 모든 내장 메서드 빠른 참조:

메서드설명
add()집합에 요소 추가
clear()모든 요소 제거
copy()얕은 복사본 반환
difference()호출자엔 있고 다른 집합엔 없는 요소들의 새 집합 반환
difference_update()제자리 차집합 제거
discard()요소 있으면 제거; 없으면 에러 없음
intersection()공통 요소들의 새 집합 반환
intersection_update()제자리 교집합 갱신
isdisjoint()공통 요소 없으면 True
issubset()호출자가 다른 집합의 부분집합이면 True
issuperset()호출자가 다른 집합을 완전히 포함하면 True
pop()임의 요소 제거 및 반환; 비었으면 KeyError
remove()요소 제거; 없으면 KeyError
symmetric_difference()각 집합에만 속하는 요소들의 새 집합 반환
symmetric_difference_update()제자리 대칭 차집합 갱신
union()모든 고유 요소를 담은 새 집합 반환
update()다른 이터러블과 제자리 합집합

집합 멤버십 테스트

in 키워드로 요소 존재 확인.

my_set = set("apple")
print('a' in my_set)   # True
print('p' not in my_set)  # False

출력

True False

집합 순회하기

표준 for 루프로 집합 순회; 순서는 보장되지 않음.

for letter in set("apple"):
    print(letter)

집합과 함께 쓰는 내장 함수

len(), max(), min(), sum(), all(), any(), sorted() 등이 집합과 원활히 작동. 주요 유틸리티 표:

함수설명
all()모든 요소가 참이면 True(빈 집합도 True)
any()최소 한 요소가 참이면 True
enumerate()인덱스와 함께 순회, 디버깅용
len()요소 개수
max()최대 요소
min()최소 요소
sorted()집합에서 정렬된 리스트 반환
sum()모든 숫자 요소의 합

Python Frozenset

frozenset은 집합의 불변 버전. 생성 후 요소 변경 불가해 해시 가능하며 딕셔너리 키로 사용 가능.

A = frozenset([1, 2, 3, 4])
B = frozenset([3, 4, 5, 6])

지원 연산은 일반 집합과 동일하나 변경 메서드는 제외.

print(A.isdisjoint(B))
print(A.difference(B))
print(A | B)
# 요소 추가 시도 시 AttributeError
# A.add(3)  # AttributeError: 'frozenset' object has no attribute 'add'

python

  1. 파이썬 데이터 타입 마스터하기: 실전 가이드
  2. 파이썬 연산자 마스터하기: 종합 가이드
  3. 파이썬 pass 문 마스터하기: 실전 가이드
  4. 파이썬 함수 인자 마스터하기: 위치, 키워드, 기본 매개변수
  5. Python 딕셔너리 마스터하기: 생성, 조작, 고급 기법
  6. Python 이터레이터: 작동 원리와 직접 만들기
  7. Python 클로저 이해하기: 중첩 함수가 변수 캡처하는 방법
  8. Python datetime 마스터하기: 날짜, 시간, 타임존 실전 가이드
  9. 파이썬(Python) 개요: 고수준, 가독성, 인터랙티브, 객체지향
  10. 파이썬 숫자(Numbers): 불변 숫자 데이터 타입 이해하기