[Python] 집합
집합
- 파이썬에서의 집합 또한 수학의 집합과 유사하며, 튜플과 달리 순서가 없는 자료형이다.
- 동일한 값을 가지는 항목의 중복이 허용되지 않는다.
- 교집합, 합집합, 차집합, 대칭차집합 등의 다양한 집합 연산을 수행할 수 있다.
numbers = {2, 1, 3} # 숫자 3개로 이루어진 집합 자료형
- 리스트로부터 집합을 생성하는 것도 가능하다.
- 집합자료형에서는 요소가 중복되면 자동으로 중복된 요소를 제거한다.
set([1, 2, 3, 1, 2]) # 리스트로 집합 생성
>> {1, 2, 3}
- 문자열로부터 집합을 생성하는 것도 가능한데, 이때에는 각 문자들이 하나의 요소가 된다.
set("abcdefa")
>> {'f', 'a', 'b', 'e', 'c', 'd'}
- 비어있는 집합을 생성하려면 set()함수를 이용한다.
numbers = set()
집합의 항목에 접근
- 어떤 항목이 집합 안에 있는지를 검사하려면 리스트와 마찬가지로 in 연산자를 이용한다.
numbers = {2, 1, 3}
if 1 in numbers: # 1이라는 항목이 numbers 집합에 있는지 검사
print("집합에 1이 있다.")
- 집합의 항목은 순서가 없기 때문에 인덱스로 접근할 수는 없다.
- 그러나 for 반복문을 이용하여 각 항목들에 접근할 수는 있다.
for x in numbers:
print(x, end=" ")
>> 3 1 2
- 항목들이 출력되는 순서는 입력된 순서와 다를 수 있다.
- 정렬되어 출력시키기를 원한다면 sorted() 함수를 이용하면 된다.
for x in sorted(numbers):
print(x, end=" ")
>> 1 2 3
- 집합의 요소에는 인덱스가 없기 때문에 인덱싱, 슬라이싱 연산은 의미가 없다.
- add() 메소드를 이용하여 하나의 요소를 추가할 수 있다.
numbers.add(4)
>> {1, 2, 3, 4}
- 집합의 요소를 삭제할 때에는 remove() 메소드를 사용할 수 있다.
numbers.remove(4)
>> {1, 2, 3}
- ==과 =! 연산자를 이용하여 2개의 집합이 서로 같은지 검사할 수 있다.
a = {1, 2, 3}
b = {1, 2, 3}
a == b
>> True
- <와 <=연산자를 이용하여 집합이 진부분집합인지, 부분집합인지 검사할 수 있다.
a = {1, 2, 3, 4, 5}
b = {1, 2, 3}
b < a
>> True
- len() : 항목의 개수 반환
- max() : 가장 큰 항목 반환
- min() : 가장 작은 항목 반환
- sorted() : 항목들 정렬하여 리스트 만들기
- sum() : 항목들의 합 구하기
- 다수의 항목을 가진 데이터에 대해 적용할 수 있는 논리 연산으로 all()과 any()함수가 있다.
- 이 함수들은 인자로 주어진 데이터의 항목들 각각에 대해 bool형 평가를 한 결과를 종합적으로 반환한다.
a = {1, 0, 2, 3, 3}
all(a) # a가 모두 True였는지 검사
>> False
any(a) # a에 하나라도 True인지(0이 아닌 것이 있는지) 검사
>> True
집합 연산
- 집합이 유용한 이유는 교집합이나 합집합 같은 집합 연산을 지원하기 때문이다.
- 합집합은 두개의 집합을 합하는 연산으로, | 연산자나 union()메소드를 사용한다.
a = {1, 2, 3}
b = {3, 4, 5}
a | b
>> {1, 2, 3, 4, 5}
a.union(b)
>> {1, 2, 3, 4, 5}
- 교집합은 겹치는 요소를 구하는 연산으로, & 연산자나 intersection() 메소드를 사용한다.
a & b
>> {3}
a.intersection(b)
>> {3}
- 차집합은 하나의 집합에서 다른 집합의 요소를 빼는 것이며, - 연산자나 difference() 메소드를 사용한다.
a - b
>> {1, 2}
a.difference(b)
>> {1, 2}
- 대칭차집합은 두 집합의 합집합에서 교집합을 뺀 요소를 구하는 것이며, ^ 연산자나 symmetric_difference() 메소드를 사용한다.
a ^ b
>> {1, 2, 4, 5}
a.symmetric_difference(b)
>> {1, 2, 4, 5}