집합(Set)형

 

 

 

# 집합(Sets) 특징
# 집합(Sets) 자료형(순서X, 중복X)

 

 


집합(Sets)사용법

집합 선언
집합 특징
집합 추가
집합 관련 함수

 

 



# 선언

a = set() #빈 집합

b = set([1, 2, 3, 4]) #원소를 리스트 형식으로 넣어주면 된다.
# b = set([1, 2, 3, 4, 4, 4])로하고 print(b)하면 {1,2,3,4}로 내부적으로 중복을 허용하지 않는다.

c = set([1, 4, 5, 6])
d = set([1, 2, 'Pen', 'Cap', 'Plate'])
e = {'foo', 'bar', 'baz', 'foo', 'qux'} #{}에서 키가 없이 원소만 나열하면 set이다.
f = {42, 'foo', (1, 2, 3), 3.14159}

print('a - ', type(a), a) #a -  <class 'set'> set()

print('b - ', type(b), b, 2 in b) #b -  <class 'set'> {1, 2, 3, 4} True
#in연산자 사용 가능. 리스트,튜플,딕셔너리에서 하는것처럼 연산자도 사용할 수 있다.
#딕셔너리와 set은 순서x여서 슬라이스가 안된다.

print('c - ', type(c), c) #c -  <class 'set'> {1, 4, 5, 6}
print('d - ', type(d), d) #d -  <class 'set'> {1, 2, 'Pen', 'Plate', 'Cap'}
print('e - ', type(e), e) #e -  <class 'set'> {'qux', 'foo', 'bar', 'baz'}
print('f - ', type(f), f) #f -  <class 'set'> {'foo', 42, 3.14159, (1, 2, 3)}



# 튜플 변환(set -> tuple)

t = tuple(b)
print('t - ', type(t), t) #t -  <class 'tuple'> (1, 2, 3, 4)
print('t - ', t[0], t[1:3]) #t -  1 (2, 3)




# 리스트 변환(set -> list)

l = list(c)
l2 = list(e)
print('l - ', type(l), l) #l -  <class 'list'> [1, 4, 5, 6]
print('l - ', l[0], l[1:3]) #l -  1 [4, 5]
print('l2 - ', type(l2), l2) #l2 -  <class 'list'> ['qux', 'foo', 'bar', 'baz']



# 길이

print(len(a)) #0
print(len(b)) #4
print(len(c)) #4
print(len(d)) #5
print(len(e)) #4



# 집합 자료형 활용

s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])

#교집합
print('l - ', s1 & s2) #l -  {4, 5, 6}
print('l - ', s1.intersection(s2)) #l -  {4, 5, 6}

#합집합
print('l - ', s1 | s2) #l -  {1, 2, 3, 4, 5, 6, 7, 8, 9}
print('l - ', s1.union(s2)) #l -  {1, 2, 3, 4, 5, 6, 7, 8, 9}

#차집합
print('l - ', s1 - s2) #l -  {1, 2, 3}
print('l - ', s1.difference(s2)) #l -  {1, 2, 3}

# 중복 원소 확인
print('l - ', s1.isdisjoint(s2)) #l -  False  교집합이 있으면 false, 없으면 true


# 부분 집합 확인
print('subset : ', s1.issubset(s2))  #subset :  False   s1이 s2의 부분집합이냐?

print('superset : ', s1.issuperset(s2)) #superset :  False   s1이 s2를 포함하는 집합이냐?
#s2 = set([4,5,6])이면 True다.




# 추가 & 제거

s1 = set([1, 2, 3, 4])
s1.add(5)  #add메소드를 사용해 추가 가능
print('s1 - ', s1) #s1 -  {1, 2, 3, 4, 5}

s1.remove(2)  #remove메소드를 사용해 삭제 가능
print('s1 - ', s1) #s1 -  {1, 3, 4, 5}
# s1.remove(7) 없는 원소를 삭제하려고 하면 keyError라는 에러(예외)가 발생한다.


s1.discard(3) #remove와 마찬가지로 삭제 기능.
print('s1 - ', s1) #s1 -  {1, 4, 5}

#s1.discard(7) 없는 원소를 삭제하려고 해도 에러(예외)가 발생하지 않음

#소프트웨어에서 실수로 인해서 또 예기치 못한 값을 입력받음으로 인해서

 어떤 에러가 발생하는걸 예외라는 표현을 한다.

 

 

 

 


# 모두 제거

s1.clear()
print('s1 - ', s1) #s1 -  set()   리스트도 clear로 모두삭제가 가능하다.

 

 

 

 

 

 

 

 

+ Recent posts