이번 포스팅에서는 파이썬의 4가지 자료구조 중 하나인 Set(집합)에 대하여 공부를 해보고자 한다.
Set(집합)
세트는 중복되는 원소 없이, 순서에 상관없이 저장하는 자료구조다.
각 원소들의 순서를 매길 수 없으며, 중복된 값 또한 허용하지 않는다.
Set 생성
세트는 중괄호({ })로 사용하여 생성하며, 세트 안의 원소(element)들은 쉼표(,)로 구분한다.
파이썬 내장 함수인 set( ) 함수를 사용하면 문자열과 같이 순환할 수 있는 객체를 세트로 변환할 수 있다.
ex) {값, 값, 값}
Set은 인덱싱(Indexing)과 슬라이싱(Slicing)을 지원하지 않는다.
예제
순서 1. 세트를 생성한다. (같은 데이터 타입, 중복 허용 x)
순서 2. 세트를 생성한다. (다른 데이터 타입, 중복 허용 x)
s1 = {1,1,1,1,2,2,3,3,4,4,5,5,1,1,3,3,2,2,4}
s1
s2 = {10, '가', '나', 10.5, '가', 10.5}
s2
[실행결과]
{1, 2, 3, 4, 5}
{10, 10.5, '가', '나'}
Set 원소 조회 및 변경
세트는 각 원소에 대한 식별자(index, key)가 없기 때문에 원하는 값을 선택하여 조회할 수 없다.
add( ) 함수를 사용하여 원소를 추가할 수 있고, remove( ) 함수를 사용하여 해당 세트에서 전달된 원소를 찾아 제거한다. 여러 개의 원소를 한 번에 추가하려면 update( ) 함수를 사용할 수 있고, pop( ) 함수를 사용하여 임의의 값을 하나씩 반환하면서 제거한다.
원소 추가
순서 1. s2에 10.5라는 원소를 추가한다. (이미 있는 값은 추가가 안된다.)
순서 2. s2에 100라는 원소를 추가한다.
순서 3. update( ) 함수를 사용하여 s2에 여러 개의 요소를 한 번에 추가한다.
s2.add(10.5)
s2
s2.add(100)
s2
s2.update([1,2,3])
s2
[실행결과]
{10, 10.5, '가', '나'}
{10, 10.5, 100, '가', '나'}
{1, 10, 10.5, 100, 2, 3, '가', '나'}
원소 삭제
순서 1. remove( ) 함수를 사용하여 원소를 삭제한다.
순서 2. pop( ) 함수를 사용하여 임의의 값으로 하나를 반환하면서 제거한다.
s2.pop()
s2
s2.remove(3)
s2
[실행결과]
'가'
{1, 10, 10.5, 100, 2, 3, '나'}
{1, 10, 10.5, 100, 2, '나'}
빈 Set(세트) 만들기
아무런 요소도 저장하고 있지 않은 집합을 빈 세트(empty set)라고 한다.
중괄호만 사용하면 빈 set 가 아니라 빈 dictionary를 생성하기 때문에 반드시 set( ) 함수를 통해서만 생성해야 한다.
ex) info = { } - (x), info - set( ) - (o)
예제
순서 1. 중괄호만 사용했을 경우
순서 2. set( ) 함수를 사용했을 경우
set_a = {}
set_b = set()
print(type(set_a))
print(type(set_b))
[실행결과]
<class 'dict'>
<class 'set'>
집합 연산
세트는 합집합, 교집합, 차집합, 여집합 등 다양한 집합 연산을 활용하여 연산을 할 수 있다.
합집합
집합 | 집합 또는 집합.union(집합) 을 사용한다.
교집합
집합 & 집합 또는 집합.intersection(집합) 을 사용한다.
차집합
집합 – 집합 또는 집합.difference(집합) 을 사용한다.
여집합
집합 ^ 집합을 사용한다.
예제
순서 1. s1, s2 두 세트를 생성한다.
순서 2. 합집합 (집합 | 집합)
순서 3. 합집합 (집합.union(집합))
순서 4. 교집합 (집합 & 집합)
순서 5. 교집합 (집합.intersection(집합))
순서 6. 차집합 (집합 – 집합)
순서 7. 차집합 (집합.difference(집합))
순서 8. 여집합 (집합 ^ 집합)
r1 = s1 | s2
r1
r2 = s1.union(s2)
r2
r3 = s1 & s2
r3
r4 = s1.intersection(s2)
r4
r5 = s1 - s2
r5
r6 = s1.difference(s2)
r6
r7 = s1 ^ s2
r7
[실행결과]
{1, 2, 3, 4, 5, 6, 7}
{1, 2, 3, 4, 5, 6, 7}
{3, 4}
{3, 4}
{1, 2}
{1, 2}
{1, 2, 5, 6, 7}
Set(집합) – 주요 메서드
메소드 | 설명 |
add(값) | 집합에 요소 추가 |
update(자료구조) | 한번에 여러 개의 요소를 추가 |
pop( ) | 값을 하나씩 반환하면서 제거한다. |
remove(값) | 값을 찾아서 삭제한다. 값이 set내에 없으면 KeyError 발생 |
len(set) | Set의 원소 개수 조회 |
in, not in 연산자 | 어떤 값이 Set(자료구조)의 원소에 있는지 여부를 반환 |
'Back-End > Python' 카테고리의 다른 글
[Python] 파이썬 - 제어문(Control Statement) (2) | 2022.09.21 |
---|---|
[Python] 자료구조 변환 함수 (2) | 2022.09.20 |
[Python] 자료구조 - Dictionary(사전) (0) | 2022.09.19 |
[Python] 자료구조 - Tuple(튜플) (0) | 2022.09.19 |
[Python] 자료구조 - List(리스트) (0) | 2022.09.18 |