집합 자료형 (Sets)
순서x, 중복x, 추가 삭제 o
a = set()
print(a, type(a)) # set() <class 'set'>
b = set([1,2,3,4])
c = set([1,2,'pen', 'cap', 'plate']) #서로 다른 자료형 가능
d = {'a', 'b', 'c', 'd'} # key가 없이 리스트를 나열하면 딕셔너리가 아닌 set
e = {42, 'f', (1,2,3), 3.14}
print(b, type(b)) # {1,2,3,4}
print(c, type(c)) # { 1,2, 'pen', 'cap', 'plate'}
print(d, type(d)) # {'a', 'b', 'c', 'd'}
print(e, type(e)) # {42, 'f', (1,2,3), 3.14}
선언을 할 때 중복된 원소는 파이선 인터프리터가 자동으로 제거한다.
t = tuple(b)
print(t, type(t)) # (1,2,3,4) <class 'tuple'>
print(t[1:3]) # (2,3)
튜플로 형 변환을 하였으니 slice 가능
l = list(C)
print(l, type(l)) # [1,2,'pen', 'cap', 'plate'] <class 'list'>
print(len(e)) # 4
자바스크립트에도 이런거 있으면 좋겠다.
const set1 = {1,2,3,4,5,6}
const set2 = {4,5,6,7,8,9}
print('set1 & set2', set1 & set2) # {4,5,6}
print('set1 & set2', set1.intersection(set2)) # {4,5,6}
print('set1 | set2', set1 | set2) # {1,2,3,4,5,6,7,8,9}
print('set1 | set2', set1.union(set2)) # {1,2,3,4,5,6,7,8,9}
print('set1 - set2', set1 - set2) # {1,2,3}
print('set1 - set2', set1.difference(set2)) # {1,2,3}
중복되는 원소인 4,5,6을 제거하고 1,2,3만 남았다.
print(set1.isdisjoint(set2)) # False
False면 중복원소가 있는거고, True면 없다
print(set1.issubet(set2)) # set1이 set2의 부분집합 ? False
a = {1,2,3,4}
a.add(5)
print(a) # {1,2,3,4,5}
집합의 끝에 추가된다 ? No 그렇게 보이는거다 ( 순서 없어 )
a.remove(3)
print(a) # {1,2,4,5}
a.remove(7) # 에러발생
remove 함수는 없는 원소를 제거하려고 하면 예외 발생
a.discard(4)
print(a) # {1,2,5}
a.discard(7) # 에러발생 하지 않음
print(a) # {1,2,5}
discard 함수는 없는 원소를 제거하려고 해도 예외 발생하지 않음
a.clear()
print(a) # set()
clear 함수는 전체 원소를 제거한다. ( 참고 - claer 함수는 리스트 에서도 사용 가능하다 )