Python 입문 | 리스트, 튜플, 레인지, 세트, 사전 | 집합을 다루는 세트
여기까지의 리스트, 튜플, 범위는 모든 시퀀스라는 것이었다. 바꿔 말하면, 인덱스 번호를 사용하여 값에 일련 번호를 할당하고 순차적으로 정리하는 컨테이너였다. 하지만, Python에는 “값이 순차적이지 않는 컨테이너"도 있다. 그 중 하나가 “세트(set)“이다. 세트는 집합의 컨테이너이다. 세트는 값을 순서대로 정리하지 않는다. 세트 안에는 동일한 값을 여러개로 가질 수 없다. 저장되어 있는 값과 같은 값은 세트에 존재하지 않는 것이다.
이 세트는 {} 기호를 붙여 작성한다.
변수 = {값1, 값2, ...}
또는 set 함수를 사용하여 만들 수 있다. 인수에는 목록 등의 컨테이너를 제공한다.
변수 = set(값1, 값2, ...)
이제 세트를 만들 수 있다. 그러나! 인덱스가 없기 때문에, 여기에서 필요한 값을 뺄 수 없다. 그럼, 무엇을 위해 있는지?라고 생각할 수도 있다. 세트는 집합이다. 따라서 어떤 값이 이 집합에 포함되어 있는지에 대한 여부를 확인할때 사용을 한다.
세트 조작
세트에서도 세트를 조작하는 기능이 여러가지 준비되어 있다. 그러나 주의하지 않으면 안되는 것은, “세트는 값의 순서가 없다"는 점이다. 이것을 잊지 말고 가보도록 하자.
값 추가
세트.add(값)
값 추가는 “add"라는 것을 사용한다. 이것으로 ()안에 값이 세트에 추가된다. 그러나 이미 세트에 동일한 값이 있는 경우는 아무런 변화가 없다.
값을 삭제
세트.remove(값)
값 삭제는 remove를 사용한다. 이것은 시컨스와 같다. 이것으로 ()안의 값이 세트에서 삭제된다.
요소의 개수 얻기
변수 = len(세트)
그 세트에 몇개의 값이 저장되어 있는지를 정수를 반환다. 이것은 이미 나왔던 거다.
최대 값, 최소값 얻기
변수 = max(세트)
변수 = min(세트)
세트에 저장되어 있는 값 중에서 가장 큰 것, 작은 것을 찾아서 반환해 준다. 이것도 시컨스에서 사용했었다.
세트의 뺄셈
세트1 - 세트2
세트는 덧셈과 곱셈은 없지만, 뺄셈은 있다. 이것으로 “세트1"에서 “세트2” 요소를 제거한 나머지를 새로운 세트로 얻을 수 있다.
세트의 비교 연산
세트1 == 세트2 등
세트는 비교 연산이 가능하다. = <> 등의 기호 류를 사용한 비교 식을 사용하여 두 세트를 비교할 수 있다. 다만, <>는 “어느 쪽의 세트가 크거나 작다"는 의미는 아니다. 이것은 “어딘가가 어딘가에 포함되어 있는지"를 나타낸다. 예를 들어 A>B라고 하면, “A세트에 B세트가 포함되어 있는지"를 나타낸다.
세트의 논리 연산
세트1 & 세트2
세트1 | 세트2
세트1 ^ 세트2
이 논리 연산은 집합인 세트 특유의 것이다. 이것들은 두개의 세트(집합)을 연산하여 새로운 세트를 만든다. 이것은 다음의 연산자를 사용해서 세트를 만들어 낸다.
기호 | 설명 |
---|---|
& | 2개의 세트에 공통되는 요소만을 가진 세트를 생성한다. (논리적) |
| | 2개의 세트에 있는 모든 요소를 가진 세트를 생성한다. (논리합) |
^ | 두 세트의 어느 한쪽에만 있는 요소로 구성된 세트를 생성한다. (배타적 논리합) |
마지막 논리 연산은 조금 이해하기 어려울지도 모른다. 실제 사용 예제를 참고하여 여러가지를 시도해 보자.
a = {'a', 'b'}
b = {'b', 'c'}
c1 = a & b
c2 = a | b
c3 = a ^ b
print(c1)
print(c2)
print(c3)