파이썬 강좌 4-7편. 집합(Set)
1. 집합(Set)
파이썬에서는 집합에 관한 자료형을 제공합니다.
집합 객체를 만드는 방법은 중괄호로 감싸고, 각 요소들은 쉼표(,)로 구분합니다.
>>> A = {1, 2, 3, 4} >>> type(A) <class 'set'>
빈 집합을 만들때는 아래와 같이 set 함수를 통해서 만들게 됩니다.
>>> empty_set = set() >>> type(empty_set) <class 'set'> >>> empty_set set()
그러나 아래와 같이 중괄호를 사용하여 빈 집합을 만들 수는 없습니다. 아래 예제와 같이 중괄호를 사용하면 파이썬은 빈 사전 객체를 만들게 됩니다. 이는 위 예제에서 empty_set을 {}로 나타내는 게 아니라 set()로 나타내는 이유와 동일합니다.
>>> B = {} >>> type(B) <class 'dict'>
집합 객체에는 순서가 있을까요? 사전과 같이 집합에도 순서가 없습니다. 간혹, 자신이 만든 집합의 내용을 확인하려고 출력했을 때 예상했던 결과값과 확실히 다른 것을 확인할 수 있습니다.
>>> A = {5, 6, 7, 8, 9} >>> A {8, 9, 5, 6, 7}
그리고 집합도 사전과 같이 중복을 허용하지 않습니다.
>>> A = {2, 5, 5, 7, 8, 8, 9} >>> A {8, 9, 2, 5, 7}
>>> a = frozenset([1, 2, 3, 4]) # frozenset({1, 2, 3, 4})로도 쓸 수 있음 >>> a frozenset({1, 2, 3, 4}) >>> a.add(5) Traceback (most recent call last): File "", line 1, in a.add(5) AttributeError: 'frozenset' object has no attribute 'add'
3. 집합의 다양한 함수 살펴보기
이번에는 집합에 관한 함수에 대해 살펴보도록 하겠습니다.
교집합을 구하는 함수 intersection
>>> A = {1, 3, 5, 7, 9} >>> B = {3, 6, 9, 12, 15} >>> A & B {9, 3} >>> A.intersection(B) {9, 3}
위 예제에서는 & 연산자(set intersection operator)와 intersection 함수를 사용하여 A와 B 두 집합의 교집합을 구한 결과를 볼 수 있습니다.
합집합을 구하는 함수 union
>>> A = {1, 3, 5, 7, 9} >>> B = {2, 4, 6, 8, 10} >>> A | B {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} >>> A.union(B) {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
이번 예제에서는 | 연산자와 union 함수를 사용하여 A와 B 두 집합의 합집합을 구한 결과를 볼 수 있습니다.
차집합을 구하는 함수 difference
>>> A = {1, 2, 3, 4, 5, 6} >>> B = {2, 3, 4, 5} >>> A - B {1, 6} >>> A.difference(B) {1, 6}
위처럼 - 연산자와 difference 함수를 사용하여 집합 B에 대한 A의 차집합을 얻을 수도 있습니다.
대칭차집합을 구하는 함수 symmetric_difference
>>> A = {1, 2, 3, 4} >>> B = {1, 4, 5} >>> A ^ B {2, 3, 5} >>> A.symmetric_difference(B) {2, 3, 5}
^ 연산자와 symmetric_difference 함수를 통하여 대칭차를 구할 수도 있습니다.
부분집합, 상위집합인지 확인하는 함수 issubset, issuperset
A = {1, 3, 5} >>> A.issubset({1, 3, 5, 7}) True >>> A.issuperset({1, 3}) True
Issubset 함수를 통해서 부분집합인지 확인할 수 있으며, issuperset은 issubset의 반대로 상위집합인지 확인하는 함수입니다. 집합 A는 집합 {1, 3, 5, 7}의 부분집합이므로 참을, 그리고 집합 {1, 3}의 상위집합이므로 참을 내보냈습니다.
>>> A = {1, 3, 5} >>> A >= {1, 3} True >>> A >= {1, 3, 7} False
함수를 사용하는 방법 말고도, >=나 <= 연산자를 통하여 부분집합(subset)인지 확인할 수 있습니다. 진부분집합인지 확인하고 싶을 때는 어떻게 해야 할까요?
>>> A = {1, 2, 3, 4, 5} >>> A > {1, 2, 4} True >>> A > {1, 5} True >>> A > {1, 2, 3, 4, 5} False >>> A > {1, 2, 6} False
위 예제처럼 >나 < 연산자를 통하여 진부분집합(proper subset)인지 확인해볼 수 있습니다.
집합에 원소를 추가하는 함수 add
>>> x = set(["Postcard", "Radio", "Telegram"]) >>> x.add("Telephone") >>> print(x) {'Telephone', 'Postcard', 'Telegram', 'Radio'}
위 예제처럼 add 함수를 통해서 집합에 원소를 추가할 수 있습니다.
집합의 특정 원소를 제거하는 함수 remove
>>> x = set(["Postcard", "Radio", "Telegram"]) >>> x.remove("Radio") >>> print(x) {'Postcard', 'Telegram'}
위 예제처럼 remove 함수를 통해서 집합의 특정 원소를 제거할 수 있습니다.
집합의 모든 원소를 제거하는 함수 clear
>>> x = set(["Postcard", "Radio", "Telegram"]) >>> x.clear() >>> print(x) set()
위 예제처럼 clear 함수를 통해서 집합의 모든 원소를 제거할 수 있습니다.
'프로그래밍 관련 > Python' 카테고리의 다른 글
파이썬 강좌 번외편. 클로저(Closure) (2) | 2019.11.21 |
---|---|
파이썬 강좌 번외편. 재귀 함수 (0) | 2019.03.29 |
파이썬 강좌 11편. 예외 처리(Exception Handling) (23) | 2013.12.29 |
파이썬 강좌 10-2편. 파일 입출력(File I/O) (39) | 2013.12.15 |
파이썬 강좌 10-1편. 입출력(I/O) (10) | 2013.12.13 |
댓글을 사용할 수 없습니다.