이전에 딕셔너리 자료형의 함수에 대해 알아봤습니다.
이번에는 집합 자료형에 대해 알아보겠습니다.
우선 기본적인 사용법부터 알아보겠습니다.
set() 함수에 리스트나 문자열을 전달하면 집합을 생성합니다.
example_set1 = set([1, 2, 3, 3])
example_set1 # {1, 2, 3}
example_set2 = set('Hello')
example_set2 # {'H', 'e', 'l', 'o'}
집합의 특징
집합 자료형은 다음 2가지 특징이 있습니다.
- 중복을 허용하지 않습니다.
- 순서가 존재하지 않습니다.
리스트나 튜플은 순서가 존재하기 때문에 인덱싱을 통해 원하는 요소값을 얻을 수 있습니다.
하지만 집합 자료형은 순서가 존재하지 않기 때문에 인덱싱이 불가능합니다.
(딕셔너리 자료형 또한 순서가 존재하지 않습니다.)
fruits = {'apple', 'banana', 'strawberry'}
for fruit in fruits:
print(fruit)
# apple
# banana
# strawberry
집합에 대해 반복문을 사용하면 원소에 접근할 수 있습니다.
fruits = {'apple', 'banana', 'strawberry'}
'strawberry' in fruits # True
'watermelon' in fruits # False
in 키워드를 사용하면 특정 원소가 집합 내부에 존재하는지 알 수 있습니다.
fruits = {'apple', 'banana', 'mango', 'strawberry', 'watermelon'}
del fruits
print(fruits) # NameError: name 'fruits' is not defined
del 키워드를 사용하면 집합 자체를 삭제합니다.
따라서 집합 자체를 삭제하고 다시 집합을 참조하면 NameError가 발생합니다.
집합의 연산
교집합
example_set1 = set([1, 2, 3, 4, 5, 6])
example_set2 = set([4, 5, 6, 7, 8, 9])
example_set1 & example_set2 # {4, 5, 6}
example_set1.intersection(example_set2) # {4, 5, 6}
'&' 기호 또는 intersection() 함수를 사용하면 교집합 연산이 가능합니다.
합집합
exampe_set1 = set([1, 2, 3, 4, 5, 6])
exampe_set2 = set([4, 5, 6, 7, 8, 9])
exampe_set1 | exampe_set2 # {1, 2, 3, 4, 5, 6, 7, 8, 9}
exampe_set1.union(exampe_set2) # {1, 2, 3, 4, 5, 6, 7, 8, 9}
'|' 기호 또는 union() 함수를 사용하면 합집합 연산이 가능합니다.
차집합
example_set1 = set([1, 2, 3, 4, 5, 6])
example_set2 = set([4, 5, 6, 7, 8, 9])
example_set1 - example_set2 # {1, 2, 3}
example_set1.difference(example_set2) # {1, 2, 3}
example_set2 - example_set1 # {7, 8, 9}
example_set2.difference(example_set1) # {7, 8, 9}
'-' 기호 또는 difference() 함수를 사용하면 차집합 연산이 가능합니다.
내장함수
add(x)
example_set1 = set([1, 2, 3])
example_set1.add(4)
example_set1 # {1, 2, 3, 4}
집합의 add() 함수는 하나의 원소(x)를 집합에 추가합니다.
update(x)
fruits1 = {'apple', 'banana', 'strawberry'}
fruits2 = {'mango', 'watermelon'}
fruits1.update(fruits2)
fruits1 # {'apple', 'banana', 'mango', 'strawberry', 'watermelon'}
# update 함수의 인자는 집합이 아니어도 됩니다.
students1 = set(['mason', 'harriet'])
students2 = ['john', 'andy']
students1.update(students2)
students1 # {'andy', 'harriet', 'john', 'mason'}
add() 함수를 사용하면 기존 집합에 또 다른 집합을 추가할 수 없습니다.
하지만 집합의 update() 함수를 사용하면 기존 집합에 또 다른 집합을 추가할 수 있습니다.
update 함수의 인자 x에는 집합 뿐만 아니라 iterable 객체를 전달할 수도 있습니다.
따라서 위 예제 코드에서 볼 수 있듯이 집합에 리스트 추가가 가능합니다.
remove(x)
fruits = {'apple', 'banana', 'mango', 'strawberry', 'watermelon'}
fruits.remove('apple')
fruits # {'banana', 'mango', 'strawberry', 'watermelon'}
fruits.remove('pineapple') # KeyError: 'pineapple'
- 원본 집합을 변경합니다.
- 새로운 집합을 리턴하지 않기 때문에 변수에 따로 할당하지 않아도 됩니다.
집합의 remove() 함수는 집합 안에 존재하는 원소 x를 삭제합니다.
하지만 존재하지 않는 원소를 삭제할 경우 KeyError가 발생합니다.
discard(x)
fruits = {'apple', 'banana', 'mango', 'strawberry', 'watermelon'}
fruits.discard('apple')
fruits # {'banana', 'mango', 'strawberry', 'watermelon'}
fruits.discard('blueberry')
fruits # {'banana', 'mango', 'strawberry', 'watermelon'}
- 원본 집합을 변경합니다.
- 새로운 집합을 리턴하지 않기 때문에 변수에 따로 할당하지 않아도 됩니다.
집합의 discard() 함수 또한 집합에 존재하는 원소 x를 삭제합니다.
하지만 remove 함수와는 달리 존재하지 않는 원소를 삭제하는 경우 에러가 발생하지 않습니다.
pop()
fruits = {'apple', 'banana', 'mango', 'strawberry', 'watermelon'}
fruit = fruits.pop()
print(fruits) # {'apple', 'banana', 'mango', 'watermelon'}
print(fruit) # 'strawberry'
집합의 pop() 함수 또한 집합의 원소를 삭제합니다.
하지만 집합은 순서가 존재하지 않기 때문에 어떤 원소가 삭제될 지 알 수 없습니다.
따라서 위 예제 코드는 매번 다른 결과를 출력합니다.
정리를 마치며
이상으로 파이썬 집합 자료형에 대한 정리를 마쳤습니다.
리스트와 딕셔너리의 함수들에 대해 정리했을 때와 같이 각 자료형에 대한 이해가 명확해지고 있습니다.
알고리즘 문제를 푸는 경우나 자료형별 메서드를 사용하면서 헷갈리면 이번 정리를 복습해야겠습니다. 👏🏻👏🏻
'파이썬・ML' 카테고리의 다른 글
파이썬 enumerate 내장함수 사용하기 (0) | 2023.05.31 |
---|---|
파이썬 map 내장함수 사용하기 (0) | 2023.05.31 |
파이썬 zip 내장함수 사용하기 (0) | 2023.05.30 |
파이썬 리스트 함수 총정리 (0) | 2023.05.30 |
파이썬 UnicodeDecodeError(feat.open함수) (0) | 2023.05.16 |