python set 자료형과 메소드
set(집합) 자료형
- set은 수학 용어로 집합이라는 의미이다.
- 중괄호 {}를 활용해서 만들 수 있다.
a = {1, 2, 3}
b = {2, 3, 4}
- 순서에 의미가 없고 중복을 허용하지 않는다.
c = {1, 1, 1, 2, 2, 2}
c
{1, 2}
-
네 가지 연산자를 조합해 합집합( ), 교집합(&), 차집합(-), 대칭차집합(^)을 구할 수 있다
print(a | b)
print(a & b)
print(a - b)
print(a ^ b) # == (a | b) - (a & b)
{1, 2, 3, 4}
{2, 3}
{1}
{1, 4}
set의 요소 추가, 제거 메서드
a = set()
- add() : 요소를 하나 추가
b = [10, 20, 30, 40, 10, 30]
for i in b:
a.add(i)
print(a)
{40, 10, 20, 30}
- update() : 리스트를 한꺼번에 추가
c = [1, 2, 3, 5, 2, 1]
a.update(c)
print(a)
{1, 2, 3, 5, 40, 10, 20, 30}
- remove() : 특정 요소를 제거
a.remove(20)
print(a)
{1, 2, 3, 5, 40, 10, 30}
# set 내부에 값이 없으면 KeyError 발생
a.remove(20)
print(a)
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
Cell In[8], line 2
1 # set 내부에 값이 없으면 KeyError 발생
----> 2 a.remove(20)
3 print(a)
KeyError: 20
- discard() : 특정 요소가 존재하면 제거
a.discard(30)
print(a)
{1, 2, 3, 5, 40, 10}
# set 내부에 값이 없어도 Error가 발생하지 않음
a.discard(30)
print(a)
{1, 2, 3, 5, 40, 10}
- pop() : 임의의 요소를 반환하고 set에서 제거
# set이 비어있다면 KeyError 발생
print(a.pop())
print(a)
1
{2, 3, 5, 40, 10}
- clear() : 모든 요소 제거
a.clear()
print(a)
set()
set의 비교 메서드
-
union() : 합집합을 반환(연산자 와 같다)
a = {1, 2, 3}
b = {2, 3, 4}
a.union(b) # b가 리스트 형태여도 된다.
{1, 2, 3, 4}
- intersection() : 교집합을 반환(연산자 &와 같다)
a = {1, 2, 3}
b = {2, 3, 4}
print(a.intersection(b))
print(a)
{2, 3}
{1, 2, 3}
- intersection_update() : 해당 set을 교집합으로 변경
a = {1, 2, 3}
b = {2, 3, 4}
a.intersection_update(b)
a
{2, 3}
- difference() : 차집합을 반환(연산자 -와 같다)
a = {1, 2, 3}
b = {2, 3, 4}
print(a.difference(b))
print(a)
{1}
{1, 2, 3}
- difference_update() : 해당 set을 차집합으로 변경
a = {1, 2, 3}
b = {2, 3, 4}
a.difference_update(b)
print(a)
{1}
- symmetric_difference() : 대칭차집합을 반환(연산자 ^와 같다)
a = {1, 2, 3}
b = {2, 3, 4}
print(a.symmetric_difference(b))
print(a)
{1, 4}
{1, 2, 3}
- symmetric_difference_update() : 해당 set을 대칭차집합으로 변경
a = {1, 2, 3}
b = {2, 3, 4}
a.symmetric_difference_update(b)
print(a)
{1, 4}
- isdisjoint() : 교집합이 존재하는지 여부(True: 교집합 없음, False: 교집합 있음)
a = {1, 2, 3}
b = {4}
a.isdisjoint(b)
True
- issubset() : 해당 set이 부분집합인지 여부
a = {1, 2, 3}
b = {2, 3}
print(b.issubset(a))
print(b <= a)
True
True
- issuperset() : 해당 set이 상위집합(초집합)인지 여부
a = {1, 2, 3}
b = {2, 3}
print(a.issuperset(b))
print(a >= b)
True
True
Reference
- Python 3.11.4 documentation: Built-in Types set
댓글남기기