collection data types_Set
컬렉션 자료형(Collection Data Types)
더보기
여러 개의 데이터를 하나의 변수에 그룹화하여 저장하고 효율적으로 관리하는 데 사용되는 자료형입니다.
일반적으로 리스트, 튜플, 딕셔너리, 세트가 있습니다.
세트(Set)
중복이 없는 유일한 요소들로 구성된 집합 형태의 자료형입니다.
파이썬에서 중괄호({})로 표현하며, 순서가 없고 중복을 허용하지 않습니다.
중복 요소를 제거하거나, 집합 연산(교집합, 합집합, 차집합 등)을 수행할 때 주로 사용합니다.
사용 예시: 고유한 태그 집합, 사용자 ID 등
- set(): 세트 생성
#세트 생성 (요소로 mutable한 값은 가질 수 없음)
nums = {1, 2, 3, 4, 4, 5} #중복된 요소는 자동으로 중복 제거
print(nums)
#결과: {1, 2, 3, 4, 5}
#빈 세트 생성
s = set()
type(s)
#결과: set
for i in {1, 3, 5, 27, 38, 4}:
print(i)
#순서 없이 출력
#결과:
#1
#3
#4
#5
#38
#27
- add(): 세트 요소 추가
#nums = {1, 2, 3, 4, 4, 5}
nums.add(6)
print(nums)
#결과: {1, 2, 3, 4, 5, 6}
- update(): 여러 요소 추가 (중복이 자동으로 제거되기 때문에 수정보다는 추가할 때 사용)
n = {1, 2, 3}
n.update([3, 4, 5])
print(n)
#결과: {1, 2, 3, 4, 5}
- remove(): 세트 요소 제거
nums = {1, 2, 3, 4, 4, 5}
nums.remove(5) #제거할 원소가 세트에 없으면 KeyError
#nums.discard(5) #제거할 원소가 없어도 에러 발생하지 않음
print(nums)
#결과: {1, 2, 3, 4, 6}
집합 연산자
- 합집합(|), 교집합(&), 차집합(-)
a = {1,2,3,4,5}
b = {2,4,6}
#합집합 연산자 사용
u = a | b
#교집합 연산자 사용
i = a & b
#차집합 연산자 사용
d1 = a - b
d2 = b - a
print("합집합:", u)
print("교집합:", i)
print("차집합(a-b):", d1)
print("차집합(b-a):", d2)
#결과
#합집합: {1, 2, 3, 4, 5, 6}
#교집합: {2, 4}
#차집합(a-b): {1, 3, 5}
#차집합(b-a): {6}
- |=, &=, -=, ^=: 연산과 할당 동시에 하기
a = {1,2,3,4,5}
b = {2,4,6}
c = {1,3,5,7}
d = {1,5}
a |= b
print(a)
c &= d
print(c)
#결과:
#{1, 2, 3, 4, 5, 6}
#{1, 5}
집합 연산메소드
- union(): 합집합
a = {1, 2, 3, 4, 5}
b = {2, 4, 6, 8}
c = a.union(b)
print(c)
#결과: {1, 2, 3, 4, 5, 6, 8}
- intersection(): 교집합
a = {1, 2, 3, 4, 5}
b = {2, 4, 6, 8}
c = a.intersection(b)
print(c)
print(c)
#결과: {2, 4}
- difference(): 차집합
a = {1, 2, 3, 4, 5}
b = {2, 4, 6, 8}
c = a.difference(b)
print(c)
#결과: {1, 3, 5}
- issubset(): 부분집합 여부 확인
a = {1, 2, 3, 4, 5}
b = {2, 4}
print(a.issubset(b))
print(b.issubset(a))
#결과:
#False
#True
- isdisjoint(): 교집합이 없으면 True, 있으면 False
a = {1, 2, 3, 4, 5}
b = {2, 4, 6, 8}
print(a.isdisjoint(b))
print(b.isdisjoint(a))
#결과:
#False
#False
a = {1, 2, 3, 4, 5}
b = {6, 8}
print(a.isdisjoint(b))
print(b.isdisjoint(a))
#결과:
#True
#True
set comprehesions
리스트 표현식과 동일하게 사용되지만, 세트의 특징인 중복 값이 제거된다는 점은 다릅니다.
- for문: {i for i in iterable}, for문 + if문: {i for i in iterable if 조건(i)}
sent = 'apple is a fruit, also pear is a fruit'
for_sent = {i for i in sent.split()}
for_if_sent = {i for i in sent if i in 'abcde'}
print(for_sent)
print(for_if_sent)
#결과:
#{'a', 'pear', 'fruit', 'fruit,', 'apple', 'is', 'also'}
#{'e', 'a'}