Python 집합 (Sets)

Python 은 데이터를 구성하는 데 도움이 되는 여러 내장 데이터 유형을 갖추고 있습니다. 이러한 구조에는 리스트, 딕셔너리, 튜플 및 **집합 (sets)**이 포함됩니다.

Python 3 문서에서 발췌

집합은 중복 요소가 없는 순서가 없는 컬렉션입니다. 기본 용도는 멤버십 테스트 및 중복 항목 제거입니다.

더 깊이 있는 참조를 위해 Python 집합: 무엇을, 왜, 어떻게를 읽어보세요.

집합 초기화

집합을 생성하는 두 가지 방법이 있습니다. 중괄호 {}를 사용하거나 내장 함수 set()을 사용하는 것입니다.

빈 집합

집합을 만들 때 빈 중괄호 {}를 사용하지 않도록 주의하세요. 그렇지 않으면 대신 빈 딕셔너리가 생성됩니다.

# 중괄호 또는 set() 함수를 사용하여 집합 생성
s = {1, 2, 3}  # 중괄호 사용
s = set([1, 2, 3])  # set() 생성자 사용

# 경고: 빈 {}는 집합이 아닌 딕셔너리를 생성합니다
s = {}  # 이것은 집합 대신 딕셔너리를 생성합니다
type(s)  # <class 'dict'> 반환
<class 'dict'>

고유 요소의 순서 없는 컬렉션

집합은 모든 중복 값을 자동으로 제거합니다.

# 집합은 중복을 자동으로 제거합니다
s = {1, 2, 3, 2, 3, 4}  # 중복은 제거됩니다
s  # {1, 2, 3, 4} 반환
{1, 2, 3, 4}
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

중복 값이 있는 집합을 생성하면 어떻게 됩니까?
A. 중복이 자동으로 제거됩니다
B. 오류가 발생합니다
C. 집합은 모든 중복을 유지합니다
D. 첫 번째 발생만 유지됩니다

그리고 순서가 없는 데이터 유형이므로 인덱싱할 수 없습니다.

s = {1, 2, 3}
s[0]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'set' object does not support indexing

set add 및 update

add() 메서드를 사용하여 집합에 단일 요소를 추가할 수 있습니다.

# add() 메서드: 집합에 단일 요소 추가
s = {1, 2, 3}
s.add(4)  # 요소 4 추가
s
{1, 2, 3, 4}

그리고 update()를 사용하면 여러 요소를 추가할 수 있습니다.

# update() 메서드: 반복 가능한 (iterable) 객체에서 여러 요소 추가
s = {1, 2, 3}
s.update([2, 3, 4, 5, 6])  # 여러 요소 추가 (중복은 무시됨)
s
{1, 2, 3, 4, 5, 6}

set remove 및 discard

두 메서드 모두 집합에서 요소를 제거하지만, remove()는 값이 존재하지 않으면 key error를 발생시킵니다.

# remove() 메서드: 요소 제거, 찾을 수 없으면 KeyError 발생
s = {1, 2, 3}
s.remove(3)  # 요소 3 제거
s
{1, 2}
s.remove(3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 3

discard()는 오류를 발생시키지 않습니다.

# discard() 메서드: 요소 제거, 누락되어도 오류 없음
s = {1, 2, 3}
s.discard(3)  # 요소 3 제거 (안전함, 누락되어도 오류 없음)
s
{1, 2}
s.discard(3)
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

집합의 remove()discard() 메서드의 차이점은 무엇입니까?
A. remove()는 하나의 요소를 제거하고, discard()는 모든 요소를 제거합니다
B. 차이점이 없습니다
C. remove()는 요소가 존재하지 않으면 오류를 발생시키지만, discard()는 그렇지 않습니다
D. remove()가 더 빠릅니다

set union (합집합)

union() 또는 |는 제공된 집합들의 모든 요소를 포함하는 새 집합을 생성합니다.

# union(): 여러 집합의 모든 요소 결합 (중복 없음)
s1 = {1, 2, 3}
s2 = {3, 4, 5}
s1.union(s2)  # 또는 's1 | s2' - {1, 2, 3, 4, 5} 반환
{1, 2, 3, 4, 5}

set intersection (교집합)

intersection() 또는 &는 모든 집합에 공통된 요소만 포함하는 집합을 반환합니다.

# intersection(): 모든 집합에 공통된 요소 반환
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s3 = {3, 4, 5}
s1.intersection(s2, s3)  # 또는 's1 & s2 & s3' - {3} 반환
{3}
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

intersection()은 집합에 대해 무엇을 반환합니까?
A. 모든 집합의 모든 요소
B. 모든 집합에 공통된 요소만
C. 첫 번째 집합에는 있지만 다른 집합에는 없는 요소
D. 두 집합 중 하나에는 있지만 둘 다에는 없는 요소

set difference (차집합)

difference() 또는 -는 첫 번째 집합 (호출된 집합) 에만 고유한 요소만 반환합니다.

# difference(): 첫 번째 집합에는 있지만 다른 집합에는 없는 요소 반환
s1 = {1, 2, 3}
s2 = {2, 3, 4}

s1.difference(s2)  # 또는 's1 - s2' - {1} 반환
{1}
s2.difference(s1) # 또는 's2 - s1'
{4}

set symmetric_difference (대칭 차집합)

symmetric_difference() 또는 ^는 두 집합에 공통되지 않은 모든 요소를 반환합니다.

# symmetric_difference(): 두 집합 중 하나에는 있지만 둘 다에는 없는 요소 반환
s1 = {1, 2, 3}
s2 = {2, 3, 4}
s1.symmetric_difference(s2)  # 또는 's1 ^ s2' - {1, 4} 반환
{1, 4}
퀴즈

로그인하여 이 퀴즈에 답하고 학습 진행 상황을 추적하세요

두 집합에 대해 symmetric_difference()는 무엇을 반환합니까?
A. 두 집합의 모든 요소
B. 두 집합에 공통된 요소만
C. 첫 번째 집합에는 있지만 두 번째 집합에는 없는 요소
D. 두 집합 중 하나에는 있지만 둘 다에는 없는 요소

관련 링크