본문 바로가기
파이썬

파이썬 컬렉션{세트}

by 코낄2 2023. 9. 6.

1. 세트

세트(set) 중복되지 않는 항목들의 컬렉션입니다. 또한, 요소 데이터에는 순서가 없습니다. 따라서 인덱스가 부여되지 않습니다.

s1 = {1, 3, 5, 7}
 
print(type(s1))    >> <class 'set'>
# 데이터가 없는 중괄호는 기본적으로 dict으로 인식
 
s3 = {1, 3, 5, 3, 7, 9, 1}
print(s3)  # 자동으로 중복된 데이터를 제거해서 저장
>>{1, 3, 5, 7, 9}

li2 = [1, 3, 5, 3, 7, 9, 1]
s4 = set(li2)
print(s4)    >> {1, 3, 5, 7, 9}

2. 메소드

세트는 여러 메소드를 가지고 있습니다.

# add(): 세트에 항목을 추가하는 메서드. 세트 데이터에는 순서가 없기때문에, 데이터가 추가되고 정렬되는 순서가 일정하지 않음.

s1 = {100, 200}  # 요소에 '순서가 없기 때문'에 인덱스 번호로 접근이 불가하다.
s1.add(150)
print(s1)   >> {200, 150, 100}

# update(): 세트에 여러 항목을 한번에 추가하는 메서드

s1 = {100, 200}
s1.update([40, 50, 60, 20]) # 보통 파이썬에서는 여러 데이터를 묶어서 사용할 때 리스트 형태를 이용한다.
print(s1)   >> {100, 200, 40, 50, 20, 60}

# remove(): 세트의 항목을 제거. 만약 그 항목이 세트에 없으면, KeyError가 발생

# discard(): 세트의 항목을 제거. 제거할 항목이 없어도 에러가 발생하지 않음

s1 = {10, 20, 30}
s1.remove(20) # in-place 연산
print(s1)  >> {10, 30}
# s1.remove(20) # KeyError: 20 # 없는 요소를 삭제하려고 하면 에러

s1 = {10, 20, 30}
s1.discard(30)
print(s1)  >> {10, 20}
s1.discard(30)
print(s1)  >> {10, 20}
# 없는 요소를 삭제하려고 해도 문제발생x. 결과 확인이 오히려 어려울 수 있다.

# copy(): 세트를 복사

s1 = {10, 20, 30}
s2 = s1.copy()   # 요소 데이터를 복사해서 '새로' 생성해서 저장.
print(s1)   >> {10, 20, 30}
print(s2)   >> {10, 20, 30}
print( id(s1))   >> 135845181247936  # 같은 데이터를 공유하는 것이 아니어서 주소가 다르게 나옴.
print( id(s2))   >> 135845180419296  # 원본 데이터를 망치고 싶지 않을 때 사용.

# union(): 두 세트의 합집합을 반환

s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
result = s1.union(s2)  # 두 세트의 합집합을 반환.
result2 = s1 | s2    # 연산자를 이용해서 합집합을 반환할 수 있음.
print(result)      >> {70, 40, 10, 50, 20, 60, 30}
print(result2)    >> {70, 40, 10, 50, 20, 60, 30}

# intersection(): 두 세트의 교집합을 반환

s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
result1 = s1.intersection(s2) 
result2 = s1 & s2
print(result1)   >> {40, 50, 30}
print(result2)   >> {40, 50, 30}

# difference(): 두 세트의 차집합을 반환

s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
result1 = s1.difference(s2) # s1 에서 s2 집합을 제외.
result2 = s1 - s2
print(result1)  >> {10, 20}
print(result2)  >> {10, 20}

# symmetric_difference() : 두 집합의 여집합을 반환.

s1 = {10, 20, 30, 40, 50}
s2 = {30, 40, 50, 60, 70}
result1 = s1.symmetric_difference(s2)   
result2 = s1 ^ s2
print(result1)   >> {20, 70, 10, 60}
print(result2)   >> {20, 70, 10, 60}

 

 

'파이썬' 카테고리의 다른 글

파이썬 연산  (0) 2023.09.07
파이썬 컬렉션{딕셔너리}  (0) 2023.09.06
input 함수  (0) 2023.09.05
파이썬 컬렉션 (튜플)  (0) 2023.09.05
파이썬 컬렉션 타입[리스트]  (0) 2023.09.04