2. 집합 연산 사용하기
- 집합 연산은 파이썬의 산술 연산자와 논리 연산자를 활용한다.
- | 연산자는 합집합( union)을 구하며 OR 연산자 | 를 사용하고 set.union 메서드와 동작이 같다.
세트1 | 세트2 set.union(세트1, 세트2)
- 세트 {1, 2, 3, 4}와 {3, 4, 5, 6}의 합집합을 구하므로 {1, 2, 3, 4, 5, 6}이 나온다.>>> a = {1, 2, 3, 4} >>> b = {3, 4, 5, 6} >>> a | b {1, 2, 3, 4, 5, 6} >>> set.union(a, b) {1, 2, 3, 4, 5, 6}
- & 연산자는 교집합(intersection)을 구하며 AND 연산자 & 를 사용하고 set.intersection 메서드와 동작이 같다.
세트1 & 세트2 set.intersection(세트1, 세트2)
- 세트 {1, 2, 3, 4}와 {3, 4, 5, 6} 중에서 교집합을 구하므로 {3, 4}가 나온다.>>> a = {1, 2, 3, 4} >>> b = {3, 4, 5, 6} >>> a & b {3, 4} >>> set.intersection(a, b) {3, 4}
- - 연산자는 차집합(difference)을 구하며 뺄셈 연산자 - 를 사용하고 set.difference 메서드와 동작이 같다.
세트1 - 세트2 set.difference(세트1, 세트2)
- 세트 {1, 2, 3, 4}에서 세트 {3, 4, 5, 6}와 겹치는 부분을 뺐으므로 {1, 2}가 나온다.>>> a - b {1, 2} >>> set.difference(a, b) {1, 2}
- ^ 연산자는 대칭차집합(symmetric difference)을 구하며 XOR 연산자 ^ 를 사용하고 set.symmetric_difference 메서드와 동작이 같다.
- 대칭차집합은 XOR 연산자의 특성을 그대로 따르는데 XOR은 서로 다르면 참이기 때문에, 집합에서는 두 집합 중 겹치지 않는 요소만 포함한다.
세트1 ^ 세트2 set.symmetric_difference(세트1, 세트2)
- 세트 {1, 2, 3, 4}와 {3, 4, 5, 6}의 대칭차집합을 구하므로 같은 값인 3과 4를 제외한 {1, 2, 5, 6}이 나온다.>>> a = {1, 2, 3, 4} >>> b = {3, 4, 5, 6} >>> a ^ b {1, 2, 5, 6} >>> set.symmetric_difference(a, b) {1, 2, 5, 6}
2-1. 집합 연산 후 할당 연산자 사용하기
- 세트 자료형에 |, &, -, ^ 연산자와 할당 연산자 = 을 함께 사용하면 집합 연산의 결과를 다시 변수에 저장(할당)한다.
- |= 은 현재 세트에 다른 세트를 더하며 update 메서드와 같다.
세트1 |= 세트2 세트1.update(세트2)
- 세트 {1, 2, 3, 4}에 {5}를 더하므로 {1, 2, 3, 4, 5}가 나온다.>>> a = {1, 2, 3, 4} >>> a |= {5} >>> a {1, 2, 3, 4, 5} >>> a = {1, 2, 3, 4} >>> a.update({5}) >>> a {1, 2, 3, 4, 5}
- &= 은 현재 세트와 다른 세트 중에서 겹치는 요소만 현재 세트에 저장하고 intersection_update 메서드와 같다.
세트1 &= 세트2 세트1.intersection_update(세트2)
- 세트 a와 {0, 1, 2, 3, 4}중에서 겹치는 요소만 a에 저장하므로 {1, 2, 3, 4}가 나온다.>>> a = {1, 2, 3, 4} >>> a &= {0, 1, 2, 3, 4} >>> a {1, 2, 3, 4} >>> a = {1, 2, 3, 4} >>> a.intersection_update({0, 1, 2, 3, 4}) >>> a {1, 2, 3, 4}
- -= 은 현재 세트에서 다른 세트를 뺴며 difference_update 메서드와 같다.
세트1 -= 세트2 세트1.difference_update(세트2)
- 세트 a에서 3을 빼므로 {1, 2, 4}가 나온다.>>> a = {1, 2, 3, 4} >>> a -= {3} >>> a {1, 2, 4} >>> a = {1, 2, 3, 4} >>> a.difference_update({3}) >>> a {1, 2, 4}
- ^= 은 현재 세트와 다른 세트 중에서 겹치지 않는 요소만 현재 세트에 저장하며 symmetric_difference_update 메서드와 같다.
세트1 ^= 세트2 세트1.symmetric_difference_update(세트2)
- 세트 a와 {3, 4, 5, 6}중에서 겹치지 않는 요소만 a에 저장하므로 {1, 2, 5, 6}이 된다.>>> a = {1, 2, 3, 4} >>> a ^= {3, 4, 5, 6} >>> a {1, 2, 5, 6} >>> a = {1, 2, 3, 4} >>> a.symmetric_difference_update({3, 4, 5, 6}) >>> a {1, 2, 5, 6}
2-2. 부분 집합과 상위집합 확인하기
- 세트는 부분집합, 진부분집합, 상위집합, 진상위집합과 같이 속하는 관계를 표현할 수도 있다.
- 현재 세트가 다른 세트의 (진)부분집합 또는 (진)상위집합인지 확인할 때는 세트 자료형에 부등호와 등호를 사용한다.
- <= 은 현재 세트가 다른 세트의 부분집합(subset)인지 확인하며 issubset 메서드와 같다.
현재세트 <= 다른세트 현재세트.issubset(다른세트)
- 세트 a가 {1, 2 3, 4}의 부분집합이므로 참이다.>>> a = {1, 2, 3, 4} >>> a <= {1, 2, 3, 4} True >>> a.issubset({1, 2, 3, 4, 5}) True
- < 은 현재 세트가 다른 세트의 진부분집합(proper subset)인지 확인하며 메서드는 없다.
현재세트 < 다른세트
- 세트 a가 {1, 2, 3, 4, 5}의 진부분집합이므로 참이다. 즉, 부분집합이지만 같지는 않을 때 참이다>>> a = {1, 2, 3, 4} >>> a < {1, 2, 3, 4, 5} True
- >= 은 현재 세트가 다른 세트의 상위집합(superset)인지 확인하며 issuperset 메서드와 같다.
현재세트 >= 다른세트 현재세트.issuperset(다른세트)
- 세트 a가 {1, 2, 3, 4}의 상위집합이므로 참이다.>>> a = {1, 2, 3, 4} >>> a >= {1, 2, 3, 4} True >>> a.issuperset({1, 2, 3, 4}) True
- > 은 현재 세트가 다른 세트의 진상위집합(proper superset)인지 확인하며 메서드는 없다.
현재세트 > 다른세트
- 세트 a가 {1, 2, 3}의 진상위집합이므로 참이다. 즉, 상위집합이지만 같지는 않을 때 참이다.>>> a = {1, 2, 3, 4} >>> a > {1, 2, 3} True
2-3. 세트가 같은지 다른지 확인하기
- 세트는 == 연산자를 사용하여 서로 같은지 확인할 수 있다.
- 세트는 요소의 순서가 정해져 있지 않으므로 == 로 비교했을 때 각 요소만 같으면 참이다.
>>> a = {1, 2, 3, 4} >>> a == {1, 2, 3, 4} True >>> a == {4, 2, 1, 3} True
- != 연산자는 세트가 다른지 확인한다.
>>> a = {1, 2, 3, 4} >>> a != {1, 2, 3} True
2-4. 세트가 겹치지 않는지 확인하기
- disjoint 는 현재 세트가 다른 세트와 겹치지 않는지 확인하며, 겹치는 요소가 없으면 True, 있으면 False 이다.
현재세트.isdisjoint(다른세트)
>>> a = {1, 2, 3, 4} >>> a.isdisjoint({5, 6, 7, 8}) # 겹치는 요소가 없음 True >>> a.isdisjoint({3, 4, 5, 6}) # a와 3, 4가 겹침 False
'Python 코딩도장' 카테고리의 다른 글
파이썬 코딩도장 Unit 26 정리(4) - 세트의 할당과 복사 (0) | 2022.02.10 |
---|---|
파이썬 코딩도장 Unit 26 정리(30) - 세트 조작 (0) | 2022.02.09 |
파이썬 코딩 도장 Unit 26 정리(1) - 세트 만들기 (0) | 2022.02.07 |
파이썬 코딩도장 Unit 25 정리(4) - 중첩 딕셔너리, 딕셔너리의 할당과 복사 (0) | 2022.02.04 |
파이썬 코딩도장 Unit 25 정리(3) - 딕셔너리 표현식 사용 (0) | 2022.02.03 |