낚시왕강군

파이썬의 집합(set)은 수학 시간에 배웠던 집합을 한 번 떠올려보면 이해가 쉬울 것이다.

     

집합의 특징

집합(set)은 중복되는 요소가 없고 순서가 없는 컬렉션으로 집합을 생성할 때는 set() 생성자를 사용하거나 중괄호{ }를 사용한다.

  • set() 생성자 : 리스트나 튜플등을 set으로 변경할 때 사용한다.
  • 중괄호 { } : 집합(set)을 만들때 사용.
  • 순서가 없기때문에 인덱싱이 불가능 (인덱싱 하려면 리스트나 튜플로 변환해야 한다.)
  • 중복을 허용하지 않기 때문에 중복제거 용도로도 많이 사용한다.

# 집합(Set) 예제

>>> my_set = {1, 3, 3, 1, 5}
>>> my_set
{1, 3, 5}
>>> your_set = set('you are lier')
>>> your_set
{'l', 'y', 'i', 'u', 'o', 'r', 'a', 'e', ' '}

중복되는 값을 제거하고 고유한(unique) 값을 보여준다. 위의 예제를 통해 공백도 하나의 값으로 처리함을 알 수 있다.

집합의 용법

집합의 용법은 크게 함수()를 통한 제어와 연산이다.

집합 제어 함수

주로 사용되는 집합 제어 함수만 소개하도록 하겠다. 

  1. add() - 단일 데이터 추가 
  2. update() - 여러 데이터 추가
  3. remove() - 단일 데이터 삭제
  4. copy() - 집합의 복사
  5. clear() - 모두 삭제

# add() 예제

>>> my_set = {1, 3, 3, 5, 1}
>>> my_set
{1, 3, 5}
>>> my_set.add(7)           # 7을 집합 my_set 에 추가
>>> my_set
{1, 3, 5, 7}

# udate() 예제

>>> my_set.update({8,2,5}) # 8, 2, 5를 집합 my_set에 추가
>>> my_set
{1, 2, 3, 5, 7, 8}

# remove() 예제

# 함수에 2개 넣었더니 한개만 넣으라고 한다.

>>> my_set.remove(3, 5)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: remove() takes exactly one argument (2 given)

>>> my_set.remove(3)
>>> my_set
{1, 2, 5, 7, 8}

# copy() 예제

>>> your_set = my_set.copy()
>>> my_set ; your_set
{1, 2, 5, 7, 8}
{1, 2, 5, 7, 8}

# clear() 예제

>>> your_set = {1, 3, 5, 6, 7, 8}

>>> your_set.clear() 
>>> your_set 
set()

 

집합 연산

수학에서의 교집합( &, intersection() ), 합집합( |, union() ), 차집합( -, difference() )과 같다고 보면 되고 연산자를 이용하여 집합 간에 연산을 한다고 생각하면 쉽다.

#교집합 예제

>>> set_A = {1, 3, 5, 7, 8}
>>> set_B = {2, 4, 6, 8, 10}
>>> set_A & set_B
{8}

>>> set_A.intersection(set_B)
{8}

#합집합 예제

>>> set_A | set_B
{1, 2, 3, 4, 5, 6, 7, 8, 10}
>>> set_A.union(set_B)
{1, 2, 3, 4, 5, 6, 7, 8, 10}

# 차집합 예제

>>> set_B - set_A
{2, 10, 4, 6}

>>> set_B.difference(set_A)
{2, 10, 4, 6}

위에서 소개한 함수외에도 다양한 제어 함수가 존재한다. (궁금하면 500원~ ㅎㅎㅎ)

다른 제어 함수가 궁금하다면 dir(set)과 help(set.함수명)을 이용해서 확인해보자.

다음 시간에는 딕셔너리(dictionary)에 대해 알아보자.

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading