#!/usr/bin/env python
# coding: utf-8

# # 2-6 집합 자료형
# 
# 집합 자료형은 어떻게 만들까?   
# 집합(set)은 파이썬 2, 3부터 지원하기 시작한 자료형으로 집합에 관련된 것을 쉽게 처리하기 위해 만든 자료형이다.

# In[1]:


s1 = set([1,2,3])
s1


# In[2]:


s2 = set("Hello")
s2


# In[4]:


# 비어있는 집합 자료형 만드는 법
s = set()
s


# 집합 자료형 특징
# 
# set("Hello")의 출력 결과가 이상하다는 걸 다 눈치챘을 것입니다.🤔 "Hello" 문자열로 set를 만들었는데 'l' 문자가 하나 빠져 있고, 숫자도 뒤바뀌어 있을 수 있습니다.(현재는 순서대로 출력되었지만) 그 이유는 set에 특징 2가지가 있기 때문입니다.
# 
# ❗ 중복을 허용하지 않는다.   
# ❗ 순서가 없다. (Unordered).
# 
# 👉 리스트나 튜플은 순서가 있기(ordered) 때문에 인덱싱을 통해 자료형의 값을 얻을 수 있지만 자료형은 순서가 없기(unordered) 때문에 인덱싱으로 값을 얻을 수 없다. 이건 딕셔너리와 성질이 비슷한데, 딕셔너리 역시 순서가 없는 자료형일 뿐더러 인덱싱을 지원하지 않는다.   
# 👉만약, set에 저장된 값을 인덱싱으로 접근하려면 '리스트'나 '튜플'로 변환한 후 해야합니다.

# In[5]:


# 집합을 리스트로 변환
s1 = set([1,2,3])
l1 = list(s1)
l1


# In[6]:


# 변환 후 인덱싱 사용
l1[0]


# In[25]:


# 집합을 튜플로 변환
s1 = set([1,2,3])
t1 = tuple(s1)
t1


# In[9]:


# 변환 후 인덱싱 사용
t1[0]


# In[10]:


# 교집합, 합집합, 차집합 구하기
s1 = set([1,2,3,4,5,6])
s2 = set([4,5,6,7,8,9])
print(s1)
print(s2)


# In[11]:


# 교집합
s1 & s2


# In[12]:


# 교집합 함수 사용
s1.intersection(s2)


# In[16]:


# 반대로 대입하여도 같다
s2.intersection(s1)


# In[14]:


# 합집합
s1 | s2


# In[15]:


# 합집합 함수 사용
s1.union(s2)


# In[17]:


# 반대로 대입하여도 같다.
s2.union(s1)


# In[18]:


# 차집합
s1 - s2


# In[19]:


# 차집합 함수 사용
s1.difference(s2)


# In[20]:


# 반대로 대입하면 다르다.
s2.difference(s1)


# 차집합의 경우 s1-s2, s2-s1은 다르다.

# In[21]:


# 집합 자료형 관련 함수
# 값 1개 추가하기(add)
s1 = set([1,2,3])
s1.add(4)
s1


# In[22]:


# 값 여러 개 추가하기(update)
s1 = set([1,2,4])
s1.update([4,5,6])
s1


# In[24]:


# 특정 값 제거하기(remove)
s1 = set([1,2,3])
s1.remove(2)
s1

