Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Tags
more
Archives
Today
Total
관리 메뉴

민수야, 너도 할 수 있어

Python 공부 (7) - 자료형(집합) 본문

언어/python

Python 공부 (7) - 자료형(집합)

devpola 2020. 2. 1. 18:30

자료형 - 집합(Set)

    집합 자료형은 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형이다.



집합 자료형 만드는 법

s1 = set([2,4,6])
print(s1)    #{2,4,6}
s2 = set("hello")
print(s2)    #{'e','l','o','h'}

    위와 같이 집합 자료형을 만드는 방법은 set 함수 안에 리스트, 튜플, 문자열을 넣으면 된다.



집합 자료형의 특징

  1. 순차적이지 않다.

     위 예제를 다시 살펴보았을 때, 인자로 전달한 문자열은 'hello'지만, 반환된 집합은 순서가 뒤죽박죽이다. 이는, 앞서 배운 딕셔너리 자료형과 동일하게 비순차적인(out of order) 자료형이어서 순서 상관없이 요소들이 배치되는 것이다.

  1. 중복을 허용하지 않는다.

     위 예제에서 s2에 전달한 문자열에는 'l' 이 두번 들어가지만, s2를 출력했을 때에는 'ㅣ'이 한개 밖에 없다. 이는, 집합 자료형이 중복을 허용하지 않기 때문이다.

a = [1,1,2,2,3,3]
s = set(a)
print(s)    #{1,2,3}
b = list(s)
print(b)    #[1,2,3]
print(b[0])    #1

    위 예제처럼, 중복을 허용하지 않는 집합의 특징을 이용하여 리스트나 튜플을 집합으로 변환했다가 다시 재변환하기도 한다. 집합 자료형을 필터로 이용하는 것이다. 또한, 집합은 순서가 없기 때문에 딕셔너리와 같이 인덱싱을 사용할 수 없다. 그렇기에 위 예제처럼 순서가 있는 자료형(문자열, 리스트, 튜플)으로 변환하여 인덱싱을 사용할 수 있다.



집합 자료형 활용하기

    아래의 예제들은 모두 s1 = set(['a','b','c'])s2 = set(['c','d','e'])가 선언되어있음을 가정하고 보아야한다.

  1. 교집합
print(s1 & s2)    #{'c'}
print(s1.intersection(s2))    #{'c'}

     두 집합의 교집합을 구하기 위해서 & 연산자를 사용하거나, intersection 함수를 위와 같이 사용할 수 있다.

  1. 합집합
print(s1 | s2)    #{'a','b','c','d','e'}
print(s1.union(s2))    #{'a','b','c','d','e'}

     두 집합의 합집합을 구하기 위해서 | 연산자를 사용하거나, union 함수를 위와 같이 사용할 수 있다.

  1. 차집합
print(s1 - s2)    #{'a','b'}
print(s2 - s1)    #{'d','e'}
print(s1.difference(s2))    #{'a','b'}
print(s2.difference(s1))    #{'d','e'}

     두 집합의 차집합을 구하기 위해서 - 연산자를 사용하거나, difference 함수를 위와 같이 사용할 수 있다.



집합 자료형 관련 함수들

    아래의 예제들은 모두 s1 = set(['a','b','c'])가 선언되어있음을 가정하고 보아야한다.

  • 한개의 값 추가하기 (add)
s1.add('e')
print(s1)    #{'a','b','c','e'}

    add 함수에 인자로 전달된 하나의 값을 집합에 추가한다. 단, 여러개의 값은 추가하지 못한다.

  • 여러개의 값 추가하기 (update)
s1.update(['d','e'])
print(s1)    #{'a','b','c','d','e'}

    add 함수에 인자로 전달된 여러개의 값을 집합에 추가한다.

  • 특정 값 제거하기 (remove)
s1.remove('a')
print(s1)    #{'b','c'}

    remove에 제거하고 싶은 값을 인자로 전달하면 그 값을 집합 내에서 제거할 수 있다.



    이번 포스팅까지 python의 자료형들을 공부해봤다. 다음 포스팅에서는 가변(mutable) vs. 불변(immutable) 과 순차적(sequential) vs. 비순차적(out of order) 에 대해 다룰것이다. 참고로, 저자는 공부자료로 박응용 저자의 점프 투 파이썬 책을 이용하고 있다. 이는 구글에서도 무료로 볼 수 있으니 공부에 참고하길 바란다.