[Pytho]집합(set)

파이썬의 기본 자료구조인 집합(set)에 대해 알아보자

집합에서는 순서가 없으며, 중복을 허용하지 않다. 각 요소의 추가/삭제가 가능하다.

# 집합(set)
# 순서없음, 중복없음, 추가/수정/삭제 가능

# 선언
a = set()
b = set([1, 2, 3, 4, 4])  # 중복이 제거됨
c = set([1, 3, 5, 7, 9])
d = set([1, 2, 'keyboard', 'mouse', 'money'])
e = {1, 2, 3, 'abc', 'def', 'ghi'}  # key=value 쌍이 아닌 value만 존재할 경우 set으로 인식
f = {123, 'foo', (1, 2, 3), 10.123}

print(type(a), type(b), type(c), type(d), type(e), type(f))
print("a = ", a)
print("b = ", b)
print("c = ", c)
print("d = ", d)
print("e = ", e)
print("f = ", f)
print()

# 튜플 변환(set -> tuple)
t = tuple(b)
print("t = ", type(t), t)
print("t = ", t[1:3])
print()

# 리스트 변화(set -> list)
l1 = list(c)
l2 = list(e)
print("l1 = ", type(l1))
print("l1 = ", l1)
print("l2 = ", l2)
print()

# 길이
print(len(a))
print(len(b))
print(len(c))
print(len(d))
print(len(e))
print(len(f))
print()

# 집합 자료형 활용
s1 = set([1, 2, 3, 7, 9])
s2 = set([1, 2, 3, 8, 10])
print("s1 & s2 = ", s1 & s2)  # 교집합
print("s1 & s2 = ", s1.intersection(s2))  # 교집합

print("s1 | s2 = ", s1 | s2)  # 합집합
print("s1 | s2 = ", s1.union(s2))  # 합집합

print("s1 - s2 = ", s1 - s2)  # 차집합
print("s1 - s2 = ", s1.difference(s2))  # 차집합
print()

# 중복원소 확인
print('s1 is disjoint s2 = ', s1.isdisjoint(s2));  # 교집합이 존재하면 False, 없으면 True
print()

# 부분 집합 확인
t1 = set([1, 2, 3, 4, 5])
t2 = set([1, 2, 3])
print("t1 = ", t1)
print("t2 = ", t2)
print("t1 is subset t2 = ", t1.issubset(t2))  # t1이 t2의 부분집합 여부 확인 (False)
print("t2 is subset t1 = ", t2.issubset(t1))  # t2가 t1의 부분집합 여부 확인 (True)
print("t1 is superset t2 = ", t1.issuperset(t2))  # t1이 t2의 부모집합 여부 확인 (True)
print("t2 is superset t1 = ", t2.issuperset(t1))  # t2가 t1의 부모집합 여부 확인 (False)
print()

# 추가/제거
s1 = set([1, 2, 3, 4])
print("s1 = ", s1)
s1.add(5)
print("s1 = ", s1)
s1.remove(2)
print("s1 = ", s1)
# s1.remove(7)  <-- 없는 원소 삭제시 keyError 발생
s1.discard(3)
print("s1 = ", s1)
s1.discard(7)  # 없는 원소 삭제시 에러가 발생하지 않는다.
print("s1 = ", s1)
s1.clear()  # 모든 원소 제거
print("s1 = ", s1)

결과 :

<class 'set'> <class 'set'> <class 'set'> <class 'set'> <class 'set'> <class 'set'>
a =  set()
b =  {1, 2, 3, 4}
c =  {1, 3, 5, 7, 9}
d =  {1, 2, 'keyboard', 'money', 'mouse'}
e =  {1, 2, 3, 'abc', 'ghi', 'def'}
f =  {123, 10.123, (1, 2, 3), 'foo'}

t =  <class 'tuple'> (1, 2, 3, 4)
t =  (2, 3)

l1 =  <class 'list'>
l1 =  [1, 3, 5, 7, 9]
l2 =  [1, 2, 3, 'abc', 'ghi', 'def']

0
4
5
5
6
4

s1 & s2 =  {1, 2, 3}
s1 & s2 =  {1, 2, 3}
s1 | s2 =  {1, 2, 3, 7, 8, 9, 10}
s1 | s2 =  {1, 2, 3, 7, 8, 9, 10}
s1 - s2 =  {9, 7}
s1 - s2 =  {9, 7}

s1 is disjoint s2 =  False

t1 =  {1, 2, 3, 4, 5}
t2 =  {1, 2, 3}
t1 is subset t2 =  False
t2 is subset t1 =  True
t1 is superset t2 =  True
t2 is superset t1 =  False

s1 =  {1, 2, 3, 4}
s1 =  {1, 2, 3, 4, 5}
s1 =  {1, 3, 4, 5}
s1 =  {1, 4, 5}
s1 =  {1, 4, 5}
s1 =  set()

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다