Programming

; develop a program

Back-End/Python

[Python] 자료구조 - Set(집합)

Clloud_ 2022. 9. 20. 11:04
반응형

이번 포스팅에서는 파이썬의 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(자료구조)의 원소에 있는지
여부를 반환

 


 

반응형