# [집합 : 집합에 관련된 것들을 쉽게 처리하기 위해 만들어진 자료형]

# 다른 언어에선 볼수 없는 자료형이다.
# 집합의 핵심 : 중복된 요소를 가질 수 없다. / 순서가 없다(Unordered 무질서).
# => list의 경우 [1,2,2,2] 이런식이 가능했지만 집합은 불가능하다.

'''
# 집합 생성법
s1 = set([1,2,3]) # [1,2,3] 리스트를 set()으로 감싸면 집합으로 변한다.
print(s1)
s1 = {1,2,3} # 위와 동일한 방법이다.
print(s1)
'''

'''
# 집합의 쓰임새
l = [1,2,2,3,3] # 중복된 것을 없애고 하나씩 남기고 싶을 경우 : 
newList = list(set(l)) # => l list를 set으로 감싸면 집합으로 바뀌면서 중복된 게 없어지고 다시 list로 만들어주면 중복없는list가 된다.
print(newList)
'''


'''
# 집합 자료형
s1 = set([1,2,3])
print(s1)

# 순서가 없고 중복이 허용되지 않는다
s2 = set("Hello") 
print(s2) # 순서가 없기에 맘대로 출력이 되고 중복이 허용되지 않기에 l이 1번만 출력된다.
'''

'''
# 교집합
s1 = set([1, 2, 3, 4, 5, 6])
s2 = set([4, 5, 6, 7, 8, 9])
print(s1 & s2) # s1, s2 집합의 중복을 출력
print(s1.intersection(s2)) # (s1 & s2)과 동일
# 합집합
print(s1 | s2) # s1, s2 집합의 중복은 1번만 출력 => {1, 2, 3, 4, 5, 6, 7, 8, 9}
print(s1.union(s2)) # (s1 | s2) 과 동일
# 차집합
print(s1 - s2) # s1에서 s2와 중복된 것을 제외한 나머지를 출력한다.
print(s2 - s1) # 반대로 s2에서 s1과 중복된 것을 제외한 나머지를 출력한다.
print(s1.difference(s2)) # (s1 - s2) 과 동일
print(s2.difference(s1)) # (s2 - s1) 과 동일
'''


# 값 1개 추가하기(add)
s1 = set([1, 2, 3])
s1.add(4) # 집합 s1에 '4'를 추가한다.
print(s1)

# 값 여러개 추가하기(update)
s2 = set([1, 2, 3])
s2.update([4,5,6]) # 집합 s2에 '4,5,6'를 추가한다.
# 중복된 값을 넣을 경우 오류가 나진 않지만 값이 들어가지도 않는다.
print(s2)

# 특정 값 제거하기(remove)
s3 = set([1, 2, 3])
s3.remove(2) # 집합 s3에 '2'를 삭제한다.(index가 아닌 value를 삭제한다.)
print(s3)