반응형
집합 자료형
집합 자료형은 다음과 같은 특징을 가지고 있다.
- 중복을 허용하지 않는다.
- 순서가 없다.
집합 자료형은 중복을 허용하지 않는 특징 때문에 데이터의 중복을 제거하는 필터로 종종 사용된다.
파이썬의 Set 이란?
집합 자료형이다.
집합 자료형 만들기
s1 = set([1,2,3])
print(s1) # {1,2,3}
s2 = set("Hello")
print(s1) # {'e', 'H', 'l','o'}
s3 = {1,2,3}
print(s3) # {1,2,3}
s = set() # 비어있는 자료형
비어있는 집합 자료형은 s = set() 로 만들 수 있다. s = {} 는 딕셔너리가 된다.
집합 자료형의 활용
교집합
>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])
s1 & s2 # {4,5,6}
s1.intersection(s2) # {4,5,6}
합집합
>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])
s1 | s2 # {1, 2, 3, 4, 5, 6, 7, 8, 9}
s1.union(s2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
차집합
>>> s1 = set([1, 2, 3, 4, 5, 6])
>>> s2 = set([4, 5, 6, 7, 8, 9])
s1 - s2 # {1,2,3}
s1.difference(s2) # {1,2,3}
s2.difference(s1) # {7,8,9}
관련함수
# 값 추가하기
s1.add(4)
# 값 여러개 추가하기
s1 = set([1,2,3])
s1.update([4,5,6]) # {1, 2, 3, 4, 5, 6}
# 특정 값 제거하기
s1.remove(2)
# 특정 값 제거하기
존재하지 않는 값 제거 가능
s1.discard(2)
# 모든 값 제거하기
s1.clear()
set 을 써야할 때
in 검사가 O(1) 로 압도적으로 빠르다보니, list 대신에 웬만하면 set 을 쓰면 좋은거 아닌가? 라는 생각이 들었다. 결론부터 말하면 케바케. 상황에 따라 적합한 것을 사용하면 된다.
set 쓰면 좋은점
- in 검사 빠름 (O(1))
set 쓰면 나쁜점
- 순서가 사라짐
- 중복이 사라짐
- 인덱스로 접근 못함
따라서 순서, 중복, 인덱스가 중요하면 list 를 사용하고, 값만 확인하는 문제면 set 을 사용한다.
참고자료
02-6 집합 자료형
집합(set)은 수학의 집합 개념과 동일한 자료형이다. 중복을 허용하지 않고 순서가 없는 데이터의 모임으로, 교집합, 합집합, 차집합 등의 집합 연산을 쉽게 처리할 수 있다. …
wikidocs.net
반응형