본문 바로가기
방구석코딩/파이썬 기초문법

[파이썬 기초] 집합 자료형 - 교집합, 합집합, 차집합, ADD, UPDATE, REMOVE

by 석세상 2022. 5. 24.
반응형

앞에서의 자료형은 자료 형태에 따라 리스트는 대괄호 '[]', 튜플은 소괄호 '()', 딕셔너리는 중괄호 '{}' 안에 자료를 입력하여 자료 형태를 구분하였다. 집합의 경우는 괄호의 형태로 구분하지 않고 앞에 set이라는 이름으로 구분한다.

 

집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형으로 앞의 세 가지 자료형에 비해 자주 사용되지는 않으나 몇몇 쉽게 처리할 수 있는 기능이 있으니 알아두자.

 

 

1. 집합 자료 형태 및 특징

  • 자료 형태 : set()이라고 쓰고 소괄호 안에 자료를 입력한다. 문자형의 경우는 그냥 소괄호 안에 쓰면 되지만 숫자형의 경우는 소괄호 안의 대괄호에 입력해야 한다. 결국 리스트 형태에 집합 자료형을 씌운 것으로 보인다.
  • 특징 : set은 중복을 허용하지 않고 순서가 없다. 아래 예시를 보면 이해가 되리라 본다.
  • 앞의 특징 중 하나인 순서가 없기 때문에 인덱싱으로 결과를 얻을 수 없다. 만약 인덱싱을 사용하려면 리스트나 튜플 형태로 자료를 변환해야 가능한데 리스트와 튜플로 변환하는 방법은 간단하다.
[입력값]
st1 = set("zoo")
st1

[출력결과] 결과자료의 순서가 일정치 않고, 중복되는 'o'는 삭제되었다.
{'o', 'z'}


[입력값] 튜플로 변환하기
tup1 = tuple(st1)
tup1

[출력결과] 출력결과에 괄호모양이 소괄호로 바뀜. 튜플이라는 것을 알 수 있음
('o', 'z')


[입력값] 리스트로 변환하기

ls1 = list(st1)
ls1

[출력결과] 출력결과에 괄호모양이 대괄호로 바뀜. 리스트라는 것을 알 수 있음
['o', 'z']

 

2. 집합 자료 연산 방법

집합의 연산을 효율적으로 사용하기 위해선 교집합, 합집합, 차집합 등을 이용하는 것이다. 이 기능을 사용하지 않는다면 굳이 집합이라는 자료 형태를 사용할 필요가 없다. 그러면 각각 활용방법에 대해서 알아보자.

 

1) 교집합 / 합집합 / 차집합

  • 교집합은 두 개의 집합에 모두 속해 있는 자료를 의미하며 '집합1 & 집합2' 또는 '집합1.intersection(집합2)로 쓴다.
  • 합집합은 두 개의 집합 중 어느 한 곳에라도 속해 있는 모든 자료를 의미하며 '집합1 | 집합2' 또는 '집합1.uion(집합2)'로 쓴다.
  • 차집합은 첫 번째 집합의 자료 중 두 번째 집합에 있는 자료를 뺀 값을 의미하며 '집합1 - 집합2' 또는 '집합1.difference(집합2)'로 쓴다.
  • 교집합과 합집합의 경우 두 집합을 연산하기 위해 순서에 따라 결과가 달라지지 않지만 차집합의 경우는 연산 시 순서에 따라 결과가 달라짐으로 주의해서 사용하자.
st1 = set([1, 2, 3, 4, 5, 6])
st2 = set([4, 5, 6, 7, 8, 9])


[입력값] 교집합 구하기

st1 & st2     → 또는 st1.intersection(st2)  둘 모두 같은 결과가 생성됨

[출력결과]
{4, 5, 6}


[입력값] 합집합 구하기

st1 | st2     → 또는 st1.uion(st2)  둘 모두 같은 결과가 생성됨

[출력결과]
{1, 2, 3, 4, 5, 6, 7, 8, 9}


[입력값] 차집합 구하기
st1 - st2     → 또는 st1.difference(st2)  둘 모두 같은 결과가 생성됨

[출력결과]
{1, 2, 3}


※ 교집합과 합집합의 경우는 st1 & st2 와 st2 & st1의 결과는 동일하고, st1 | st2 와 st2 | st1의 결과는 동일하지만 차집합의 경우 st1 - st2와 st2 - st1의 결과는 다르다.

st1 - st2의 결과는 {1, 2, 3}이나 st2 - st1의 결과는 {7, 8, 9}로 나타남

 

2) 그 외 관련 함수 (add, update, remove)

  • 1개 자료 추가하기 : add를 이용하여 하나의 자료를 추가할 수 있음. 예시) st1.add(7)
  • 여러 자료 추가하기 : update를 이용하여 한꺼번에 추가 가능. 예시) st1.update([7, 8, 9])
  • 특정값 제거 : remove를 사용하여 삭제 가능. 예시) st1.remove(1)

 

지금까지 숫자, 문자, 리스트, 튜플, 딕셔너리, 집합까지 자료 형태에 대해서 알아보았는데 기본적으로 자료 형태에 대해서 습득하고 있어야 파이썬을 다룰 때 응용도 가능하고 헷갈리지 않고 어느 정도 사용할 수 있다. 가장 기초적이고 가장 중요한 부분이니 지금까지의 자료 형태에 대해서는 익숙해지도록 숙지하는 것이 필요하다. 

 

 

 

연습해 보면서 예시도 조금 바꿔보면서 이렇게 바꿔보면 어떻게 나오지?라고 생각하면서 바꿔보기도 하면 내가 생각했던 결과와 다르게 나올 수도 있고, 또 에러가 발생해서 실행되지 않는 경우도 있으니 본인이 생각나는 게 있다면 조금씩 바꿔가면서 연습해보는 게 중요하다.

 

 

 

 

728x90
반응형

댓글